xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/branch-fold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @test(i32* %P, i32* %Q, i1 %A, i1 %B) {
4*9880d681SAndroid Build Coastguard Worker; CHECK: test
5*9880d681SAndroid Build Coastguard Worker; CHECK: br i1
6*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: br i1
7*9880d681SAndroid Build Coastguard Worker; CHECK: ret
8*9880d681SAndroid Build Coastguard Worker; CHECK: ret
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker        br i1 %A, label %a, label %b
12*9880d681SAndroid Build Coastguard Workera:
13*9880d681SAndroid Build Coastguard Worker        br i1 %B, label %b, label %c
14*9880d681SAndroid Build Coastguard Workerb:
15*9880d681SAndroid Build Coastguard Worker        store i32 123, i32* %P
16*9880d681SAndroid Build Coastguard Worker        ret void
17*9880d681SAndroid Build Coastguard Workerc:
18*9880d681SAndroid Build Coastguard Worker        ret void
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; rdar://10554090
22*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test2(i64 %i0, i64 %i1) nounwind uwtable readonly ssp {
23*9880d681SAndroid Build Coastguard Workerentry:
24*9880d681SAndroid Build Coastguard Worker; CHECK: test2
25*9880d681SAndroid Build Coastguard Worker; CHECK: br i1
26*9880d681SAndroid Build Coastguard Worker  %and.i.i = and i64 %i0, 281474976710655
27*9880d681SAndroid Build Coastguard Worker  %and.i11.i = and i64 %i1, 281474976710655
28*9880d681SAndroid Build Coastguard Worker  %or.cond = icmp eq i64 %and.i.i, %and.i11.i
29*9880d681SAndroid Build Coastguard Worker  br i1 %or.cond, label %c, label %a
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workera:
32*9880d681SAndroid Build Coastguard Worker; CHECK: br
33*9880d681SAndroid Build Coastguard Worker  %shr.i4.i = lshr i64 %i0, 48
34*9880d681SAndroid Build Coastguard Worker  %and.i5.i = and i64 %shr.i4.i, 32767
35*9880d681SAndroid Build Coastguard Worker  %shr.i.i = lshr i64 %i1, 48
36*9880d681SAndroid Build Coastguard Worker  %and.i2.i = and i64 %shr.i.i, 32767
37*9880d681SAndroid Build Coastguard Worker  %cmp9.i = icmp ult i64 %and.i5.i, %and.i2.i
38*9880d681SAndroid Build Coastguard Worker  br i1 %cmp9.i, label %c, label %b
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerb:
41*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: br
42*9880d681SAndroid Build Coastguard Worker  %shr.i13.i9 = lshr i64 %i1, 48
43*9880d681SAndroid Build Coastguard Worker  %and.i14.i10 = and i64 %shr.i13.i9, 32767
44*9880d681SAndroid Build Coastguard Worker  %shr.i.i11 = lshr i64 %i0, 48
45*9880d681SAndroid Build Coastguard Worker  %and.i11.i12 = and i64 %shr.i.i11, 32767
46*9880d681SAndroid Build Coastguard Worker  %phitmp = icmp uge i64 %and.i14.i10, %and.i11.i12
47*9880d681SAndroid Build Coastguard Worker  br label %c
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerc:
50*9880d681SAndroid Build Coastguard Worker  %o2 = phi i1 [ false, %a ], [ %phitmp, %b ], [ false, %entry ]
51*9880d681SAndroid Build Coastguard Worker  ret i1 %o2
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; PR13180
55*9880d681SAndroid Build Coastguard Workerdefine void @pr13180(i8 %p) {
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  %tobool = icmp eq i8 %p, 0
58*9880d681SAndroid Build Coastguard Worker  br i1 %tobool, label %cond.false, label %cond.true
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workercond.true:                                        ; preds = %entry
61*9880d681SAndroid Build Coastguard Worker  br label %cond.end
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workercond.false:                                       ; preds = %entry
64*9880d681SAndroid Build Coastguard Worker  %phitmp = icmp eq i8 %p, 0
65*9880d681SAndroid Build Coastguard Worker  br label %cond.end
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workercond.end:                                         ; preds = %cond.false, %cond.true
68*9880d681SAndroid Build Coastguard Worker  %cond = phi i1 [ undef, %cond.true ], [ %phitmp, %cond.false ]
69*9880d681SAndroid Build Coastguard Worker  unreachable
70*9880d681SAndroid Build Coastguard Worker}
71