blob: e3e27c706d1d30b9e334d2d826da645cb830df63 [file] [log] [blame]
Nadav Rotem5ba1c6c2013-11-10 04:13:31 +00001; 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
David Blaikie23af6482015-04-16 23:24:18 +000021 %7 = tail call i32 (...) @bar() nounwind
Nadav Rotem5ba1c6c2013-11-10 04:13:31 +000022 br label %8
23
24; <label>:8 ; preds = %3, %0, %6
25 ret i32 undef
26}
27
Nadav Rotem53d32212013-11-12 22:37:16 +000028;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
David Blaikie23af6482015-04-16 23:24:18 +000050 %tmp8 = tail call i32 (...) @bar() #1
Nadav Rotem53d32212013-11-12 22:37:16 +000051 br label %bb9
52
53bb9: ; preds = %bb7, %bb3, %bb
54 ret i32 undef
55}
56
Nadav Rotem5ba1c6c2013-11-10 04:13:31 +000057declare i32 @bar(...)