xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/implied-cond-matching-imm.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt %s -S -simplifycfg | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; cmp1 implies cmp2 is false
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
5*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @is(i1 true)
6*9880d681SAndroid Build Coastguard Worker; CHECK: call void @is(i1 false)
7*9880d681SAndroid Build Coastguard Workerdefine void @test1(i32 %a) {
8*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp eq i32 %a, 0
9*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %taken, label %untaken
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workertaken:
12*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp eq i32 %a, 1
13*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %istrue, label %isfalse
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workeristrue:
16*9880d681SAndroid Build Coastguard Worker  call void @is(i1 true)
17*9880d681SAndroid Build Coastguard Worker  ret void
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerisfalse:
20*9880d681SAndroid Build Coastguard Worker  call void @is(i1 false)
21*9880d681SAndroid Build Coastguard Worker  ret void
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workeruntaken:
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; cmp1 implies cmp2 is false
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2
29*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @is(i1 true)
30*9880d681SAndroid Build Coastguard Worker; CHECK: call void @is(i1 false)
31*9880d681SAndroid Build Coastguard Workerdefine void @test2(i32 %a) {
32*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp ugt i32 %a, 5
33*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %untaken, label %taken
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workertaken:
36*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp ugt i32 %a, 6
37*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %istrue, label %isfalse
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workeristrue:
40*9880d681SAndroid Build Coastguard Worker  call void @is(i1 true)
41*9880d681SAndroid Build Coastguard Worker  ret void
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerisfalse:
44*9880d681SAndroid Build Coastguard Worker  call void @is(i1 false)
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workeruntaken:
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; cmp1 implies cmp2 is false
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3
53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @is(i1 true)
54*9880d681SAndroid Build Coastguard Worker; CHECK: call void @is(i1 false)
55*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %a) {
56*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp ugt i32 %a, 1
57*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %taken, label %untaken
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workertaken:
60*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp eq i32 %a, 0
61*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %istrue, label %isfalse
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workeristrue:
64*9880d681SAndroid Build Coastguard Worker  call void @is(i1 true)
65*9880d681SAndroid Build Coastguard Worker  ret void
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerisfalse:
68*9880d681SAndroid Build Coastguard Worker  call void @is(i1 false)
69*9880d681SAndroid Build Coastguard Worker  ret void
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workeruntaken:
72*9880d681SAndroid Build Coastguard Worker  ret void
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; cmp1 implies cmp2 is true
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4
77*9880d681SAndroid Build Coastguard Worker; CHECK: call void @is(i1 true)
78*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @is(i1 false)
79*9880d681SAndroid Build Coastguard Workerdefine void @test4(i32 %a) {
80*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp sgt i32 %a, 1
81*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %taken, label %untaken
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workertaken:
84*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp ugt i32 %a, 0
85*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %istrue, label %isfalse
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workeristrue:
88*9880d681SAndroid Build Coastguard Worker  call void @is(i1 true)
89*9880d681SAndroid Build Coastguard Worker  ret void
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerisfalse:
92*9880d681SAndroid Build Coastguard Worker  call void @is(i1 false)
93*9880d681SAndroid Build Coastguard Worker  ret void
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workeruntaken:
96*9880d681SAndroid Build Coastguard Worker  ret void
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; cmp1 implies cmp2 is true
100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5
101*9880d681SAndroid Build Coastguard Worker; CHECK: call void @is(i1 true)
102*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @is(i1 false)
103*9880d681SAndroid Build Coastguard Workerdefine void @test5(i32 %a) {
104*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp sgt i32 %a, 5
105*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %taken, label %untaken
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Workertaken:
108*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp sgt i32 %a, -1
109*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %istrue, label %isfalse
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workeristrue:
112*9880d681SAndroid Build Coastguard Worker  call void @is(i1 true)
113*9880d681SAndroid Build Coastguard Worker  ret void
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerisfalse:
116*9880d681SAndroid Build Coastguard Worker  call void @is(i1 false)
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workeruntaken:
120*9880d681SAndroid Build Coastguard Worker  ret void
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare void @is(i1)
124