1; RUN: opt < %s -simplifycfg -S | FileCheck %s
2
3;CHECK: @foo
4;CHECK: and i32 %c1, %k
5;CHECK: icmp eq i32
6;CHECK: and i32 %c2, %k
7;CHECK: icmp eq i32
8;CHECK: or i1
9;CHECK: ret
10define i32 @foo(i32 %k, i32 %c1, i32 %c2) {
11  %1 = and i32 %c1, %k
12  %2 = icmp eq i32 %1, 0
13  br i1 %2, label %8, label %3
14
15; <label>:3                                       ; preds = %0
16  %4 = and i32 %c2, %k
17  %5 = icmp eq i32 %4, 0
18  br i1 %5, label %8, label %6
19
20; <label>:6                                       ; preds = %3
21  %7 = tail call i32 (...)* @bar() nounwind
22  br label %8
23
24; <label>:8                                       ; preds = %3, %0, %6
25  ret i32 undef
26}
27
28;CHECK: @conduse
29;CHECK: shl i32 1, %c1
30;CHECK-NEXT: shl i32 1, %c2
31;CHECK-NEXT: and i32
32;CHECK-NEXT: icmp eq i32
33;CHECK-NEXT: and i32
34;CHECK-NEXT: icmp eq i32
35;CHECK: ret
36define i32 @conduse(i32 %k, i32 %c1, i32 %c2) #0 {
37bb:
38  %tmp = shl i32 1, %c1
39  %tmp4 = shl i32 1, %c2
40  %tmp1 = and i32 %tmp, %k
41  %tmp2 = icmp eq i32 %tmp1, 0
42  br i1 %tmp2, label %bb9, label %bb3
43
44bb3:                                              ; preds = %bb
45  %tmp5 = and i32 %tmp4, %k
46  %tmp6 = icmp eq i32 %tmp5, 0
47  br i1 %tmp6, label %bb9, label %bb7
48
49bb7:                                              ; preds = %bb3
50  %tmp8 = tail call i32 (...)* @bar() #1
51  br label %bb9
52
53bb9:                                              ; preds = %bb7, %bb3, %bb
54  ret i32 undef
55}
56
57declare i32 @bar(...)
58