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