1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
3
4declare void @widget()
5declare void @baz(i8)
6declare void @snork()
7declare void @spam(i8)
8declare void @zot()
9
10define void @wombat(i64 %arg, i1 %arg1) {
11; CHECK-LABEL: @wombat(
12; CHECK-NEXT:  bb:
13; CHECK-NEXT:    [[COND:%.*]] = icmp eq i64 [[ARG:%.*]], 0
14; CHECK-NEXT:    br i1 [[COND]], label [[BB4:%.*]], label [[BB2:%.*]]
15; CHECK:       bb2:
16; CHECK-NEXT:    call void @widget()
17; CHECK-NEXT:    br label [[BB4]]
18; CHECK:       bb4:
19; CHECK-NEXT:    [[TMP:%.*]] = phi i8 [ 0, [[BB:%.*]] ], [ 1, [[BB2]] ]
20; CHECK-NEXT:    call void @baz(i8 [[TMP]])
21; CHECK-NEXT:    call void @snork()
22; CHECK-NEXT:    call void @spam(i8 4)
23; CHECK-NEXT:    ret void
24;
25bb:
26  switch i64 %arg, label %bb2 [
27  i64 0, label %bb3
28  ]
29
30bb2:                                              ; preds = %bb
31  call void @widget()
32  br label %bb3
33
34bb3:                                              ; preds = %bb2, %bb
35  %tmp = phi i8 [ 0, %bb ], [ 1, %bb2 ]
36  br label %bb4
37
38bb4:                                              ; preds = %bb3
39  call void @baz(i8 %tmp)
40  %tmp5 = select i1 %arg1, i64 6, i64 3
41  switch i64 %tmp5, label %bb7 [
42  i64 1, label %bb6
43  i64 0, label %bb8
44  ]
45
46bb6:                                              ; preds = %bb4
47  call void @zot()
48  br label %bb8
49
50bb7:                                              ; preds = %bb4
51  call void @snork()
52  br label %bb8
53
54bb8:                                              ; preds = %bb7, %bb6, %bb4
55  %tmp9 = phi i8 [ 2, %bb4 ], [ 3, %bb6 ], [ 4, %bb7 ]
56  call void @spam(i8 %tmp9)
57  ret void
58}
59