annotate llvm/test/Transforms/NewGVN/condprop.ll @ 201:a96fbbdf2d0f

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jun 2021 21:07:06 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
anatofuz
parents:
diff changeset
2 ; RUN: opt < %s -basicaa -newgvn -S | FileCheck %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 declare void @foo(i1)
anatofuz
parents:
diff changeset
6 declare void @bar(i32)
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 define void @test3(i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
9 ; CHECK-LABEL: @test3(
anatofuz
parents:
diff changeset
10 ; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0
anatofuz
parents:
diff changeset
11 ; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0
anatofuz
parents:
diff changeset
12 ; CHECK-NEXT: [[Z:%.*]] = and i1 [[XZ]], [[YZ]]
anatofuz
parents:
diff changeset
13 ; CHECK-NEXT: br i1 [[Z]], label [[BOTH_ZERO:%.*]], label [[NOPE:%.*]]
anatofuz
parents:
diff changeset
14 ; CHECK: both_zero:
anatofuz
parents:
diff changeset
15 ; CHECK-NEXT: call void @foo(i1 true)
anatofuz
parents:
diff changeset
16 ; CHECK-NEXT: call void @foo(i1 true)
anatofuz
parents:
diff changeset
17 ; CHECK-NEXT: call void @bar(i32 0)
anatofuz
parents:
diff changeset
18 ; CHECK-NEXT: call void @bar(i32 0)
anatofuz
parents:
diff changeset
19 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
20 ; CHECK: nope:
anatofuz
parents:
diff changeset
21 ; CHECK-NEXT: call void @foo(i1 false)
anatofuz
parents:
diff changeset
22 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
23 ;
anatofuz
parents:
diff changeset
24 %xz = icmp eq i32 %x, 0
anatofuz
parents:
diff changeset
25 %yz = icmp eq i32 %y, 0
anatofuz
parents:
diff changeset
26 %z = and i1 %xz, %yz
anatofuz
parents:
diff changeset
27 br i1 %z, label %both_zero, label %nope
anatofuz
parents:
diff changeset
28 both_zero:
anatofuz
parents:
diff changeset
29 call void @foo(i1 %xz)
anatofuz
parents:
diff changeset
30 call void @foo(i1 %yz)
anatofuz
parents:
diff changeset
31 call void @bar(i32 %x)
anatofuz
parents:
diff changeset
32 call void @bar(i32 %y)
anatofuz
parents:
diff changeset
33 ret void
anatofuz
parents:
diff changeset
34 nope:
anatofuz
parents:
diff changeset
35 call void @foo(i1 %z)
anatofuz
parents:
diff changeset
36 ret void
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38 define void @test4(i1 %b, i32 %x) {
anatofuz
parents:
diff changeset
39 ; CHECK-LABEL: @test4(
anatofuz
parents:
diff changeset
40 ; CHECK-NEXT: br i1 [[B:%.*]], label [[SW:%.*]], label [[CASE3:%.*]]
anatofuz
parents:
diff changeset
41 ; CHECK: sw:
anatofuz
parents:
diff changeset
42 ; CHECK-NEXT: switch i32 [[X:%.*]], label [[DEFAULT:%.*]] [
anatofuz
parents:
diff changeset
43 ; CHECK-NEXT: i32 0, label [[CASE0:%.*]]
anatofuz
parents:
diff changeset
44 ; CHECK-NEXT: i32 1, label [[CASE1:%.*]]
anatofuz
parents:
diff changeset
45 ; CHECK-NEXT: i32 2, label [[CASE0]]
anatofuz
parents:
diff changeset
46 ; CHECK-NEXT: i32 3, label [[CASE3]]
anatofuz
parents:
diff changeset
47 ; CHECK-NEXT: i32 4, label [[DEFAULT]]
anatofuz
parents:
diff changeset
48 ; CHECK-NEXT: ]
anatofuz
parents:
diff changeset
49 ; CHECK: default:
anatofuz
parents:
diff changeset
50 ; CHECK-NEXT: call void @bar(i32 [[X]])
anatofuz
parents:
diff changeset
51 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
52 ; CHECK: case0:
anatofuz
parents:
diff changeset
53 ; CHECK-NEXT: call void @bar(i32 [[X]])
anatofuz
parents:
diff changeset
54 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
55 ; CHECK: case1:
anatofuz
parents:
diff changeset
56 ; CHECK-NEXT: call void @bar(i32 1)
anatofuz
parents:
diff changeset
57 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
58 ; CHECK: case3:
anatofuz
parents:
diff changeset
59 ; CHECK-NEXT: call void @bar(i32 [[X]])
anatofuz
parents:
diff changeset
60 ; CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
61 ;
anatofuz
parents:
diff changeset
62 br i1 %b, label %sw, label %case3
anatofuz
parents:
diff changeset
63 sw:
anatofuz
parents:
diff changeset
64 switch i32 %x, label %default [
anatofuz
parents:
diff changeset
65 i32 0, label %case0
anatofuz
parents:
diff changeset
66 i32 1, label %case1
anatofuz
parents:
diff changeset
67 i32 2, label %case0
anatofuz
parents:
diff changeset
68 i32 3, label %case3
anatofuz
parents:
diff changeset
69 i32 4, label %default
anatofuz
parents:
diff changeset
70 ]
anatofuz
parents:
diff changeset
71 default:
anatofuz
parents:
diff changeset
72 call void @bar(i32 %x)
anatofuz
parents:
diff changeset
73 ret void
anatofuz
parents:
diff changeset
74 case0:
anatofuz
parents:
diff changeset
75 call void @bar(i32 %x)
anatofuz
parents:
diff changeset
76 ret void
anatofuz
parents:
diff changeset
77 case1:
anatofuz
parents:
diff changeset
78 call void @bar(i32 %x)
anatofuz
parents:
diff changeset
79 ret void
anatofuz
parents:
diff changeset
80 case3:
anatofuz
parents:
diff changeset
81 call void @bar(i32 %x)
anatofuz
parents:
diff changeset
82 ret void
anatofuz
parents:
diff changeset
83 }
anatofuz
parents:
diff changeset
84
anatofuz
parents:
diff changeset
85 define i1 @test5(i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
86 ; CHECK-LABEL: @test5(
anatofuz
parents:
diff changeset
87 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
anatofuz
parents:
diff changeset
88 ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
anatofuz
parents:
diff changeset
89 ; CHECK: same:
anatofuz
parents:
diff changeset
90 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
91 ; CHECK: different:
anatofuz
parents:
diff changeset
92 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
93 ;
anatofuz
parents:
diff changeset
94 %cmp = icmp eq i32 %x, %y
anatofuz
parents:
diff changeset
95 br i1 %cmp, label %same, label %different
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 same:
anatofuz
parents:
diff changeset
98 %cmp2 = icmp ne i32 %x, %y
anatofuz
parents:
diff changeset
99 ret i1 %cmp2
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 different:
anatofuz
parents:
diff changeset
102 %cmp3 = icmp eq i32 %x, %y
anatofuz
parents:
diff changeset
103 ret i1 %cmp3
anatofuz
parents:
diff changeset
104 }
anatofuz
parents:
diff changeset
105
anatofuz
parents:
diff changeset
106
anatofuz
parents:
diff changeset
107 define i1 @test7(i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
108 ; CHECK-LABEL: @test7(
anatofuz
parents:
diff changeset
109 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]
anatofuz
parents:
diff changeset
110 ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
anatofuz
parents:
diff changeset
111 ; CHECK: same:
anatofuz
parents:
diff changeset
112 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
113 ; CHECK: different:
anatofuz
parents:
diff changeset
114 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
115 ;
anatofuz
parents:
diff changeset
116 %cmp = icmp sgt i32 %x, %y
anatofuz
parents:
diff changeset
117 br i1 %cmp, label %same, label %different
anatofuz
parents:
diff changeset
118
anatofuz
parents:
diff changeset
119 same:
anatofuz
parents:
diff changeset
120 %cmp2 = icmp sle i32 %x, %y
anatofuz
parents:
diff changeset
121 ret i1 %cmp2
anatofuz
parents:
diff changeset
122
anatofuz
parents:
diff changeset
123 different:
anatofuz
parents:
diff changeset
124 %cmp3 = icmp sgt i32 %x, %y
anatofuz
parents:
diff changeset
125 ret i1 %cmp3
anatofuz
parents:
diff changeset
126 }
anatofuz
parents:
diff changeset
127
anatofuz
parents:
diff changeset
128 define i1 @test7_fp(float %x, float %y) {
anatofuz
parents:
diff changeset
129 ; CHECK-LABEL: @test7_fp(
anatofuz
parents:
diff changeset
130 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]]
anatofuz
parents:
diff changeset
131 ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
anatofuz
parents:
diff changeset
132 ; CHECK: same:
anatofuz
parents:
diff changeset
133 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
134 ; CHECK: different:
anatofuz
parents:
diff changeset
135 ; CHECK-NEXT: ret i1 false
anatofuz
parents:
diff changeset
136 ;
anatofuz
parents:
diff changeset
137 %cmp = fcmp ogt float %x, %y
anatofuz
parents:
diff changeset
138 br i1 %cmp, label %same, label %different
anatofuz
parents:
diff changeset
139
anatofuz
parents:
diff changeset
140 same:
anatofuz
parents:
diff changeset
141 %cmp2 = fcmp ule float %x, %y
anatofuz
parents:
diff changeset
142 ret i1 %cmp2
anatofuz
parents:
diff changeset
143
anatofuz
parents:
diff changeset
144 different:
anatofuz
parents:
diff changeset
145 %cmp3 = fcmp ogt float %x, %y
anatofuz
parents:
diff changeset
146 ret i1 %cmp3
anatofuz
parents:
diff changeset
147 }
anatofuz
parents:
diff changeset
148
anatofuz
parents:
diff changeset
149 ; PR1768
anatofuz
parents:
diff changeset
150 define i32 @test9(i32 %i, i32 %j) {
anatofuz
parents:
diff changeset
151 ; CHECK-LABEL: @test9(
anatofuz
parents:
diff changeset
152 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]]
anatofuz
parents:
diff changeset
153 ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
anatofuz
parents:
diff changeset
154 ; CHECK: cond_true:
anatofuz
parents:
diff changeset
155 ; CHECK-NEXT: ret i32 0
anatofuz
parents:
diff changeset
156 ; CHECK: ret:
anatofuz
parents:
diff changeset
157 ; CHECK-NEXT: ret i32 5
anatofuz
parents:
diff changeset
158 ;
anatofuz
parents:
diff changeset
159 %cmp = icmp eq i32 %i, %j
anatofuz
parents:
diff changeset
160 br i1 %cmp, label %cond_true, label %ret
anatofuz
parents:
diff changeset
161
anatofuz
parents:
diff changeset
162 cond_true:
anatofuz
parents:
diff changeset
163 %diff = sub i32 %i, %j
anatofuz
parents:
diff changeset
164 ret i32 %diff
anatofuz
parents:
diff changeset
165
anatofuz
parents:
diff changeset
166 ret:
anatofuz
parents:
diff changeset
167 ret i32 5
anatofuz
parents:
diff changeset
168 }
anatofuz
parents:
diff changeset
169
anatofuz
parents:
diff changeset
170 ; PR1768
anatofuz
parents:
diff changeset
171 define i32 @test10(i32 %j, i32 %i) {
anatofuz
parents:
diff changeset
172 ; CHECK-LABEL: @test10(
anatofuz
parents:
diff changeset
173 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]]
anatofuz
parents:
diff changeset
174 ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
anatofuz
parents:
diff changeset
175 ; CHECK: cond_true:
anatofuz
parents:
diff changeset
176 ; CHECK-NEXT: ret i32 0
anatofuz
parents:
diff changeset
177 ; CHECK: ret:
anatofuz
parents:
diff changeset
178 ; CHECK-NEXT: ret i32 5
anatofuz
parents:
diff changeset
179 ;
anatofuz
parents:
diff changeset
180 %cmp = icmp eq i32 %i, %j
anatofuz
parents:
diff changeset
181 br i1 %cmp, label %cond_true, label %ret
anatofuz
parents:
diff changeset
182
anatofuz
parents:
diff changeset
183 cond_true:
anatofuz
parents:
diff changeset
184 %diff = sub i32 %i, %j
anatofuz
parents:
diff changeset
185 ret i32 %diff
anatofuz
parents:
diff changeset
186
anatofuz
parents:
diff changeset
187 ret:
anatofuz
parents:
diff changeset
188 ret i32 5
anatofuz
parents:
diff changeset
189 }
anatofuz
parents:
diff changeset
190
anatofuz
parents:
diff changeset
191 declare i32 @yogibar()
anatofuz
parents:
diff changeset
192
anatofuz
parents:
diff changeset
193 define i32 @test11(i32 %x) {
anatofuz
parents:
diff changeset
194 ; CHECK-LABEL: @test11(
anatofuz
parents:
diff changeset
195 ; CHECK-NEXT: [[V0:%.*]] = call i32 @yogibar()
anatofuz
parents:
diff changeset
196 ; CHECK-NEXT: [[V1:%.*]] = call i32 @yogibar()
anatofuz
parents:
diff changeset
197 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V0]], [[V1]]
anatofuz
parents:
diff changeset
198 ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[NEXT:%.*]]
anatofuz
parents:
diff changeset
199 ; CHECK: cond_true:
anatofuz
parents:
diff changeset
200 ; CHECK-NEXT: ret i32 [[V0]]
anatofuz
parents:
diff changeset
201 ; CHECK: next:
anatofuz
parents:
diff changeset
202 ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[X:%.*]], [[V0]]
anatofuz
parents:
diff changeset
203 ; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE2:%.*]], label [[NEXT2:%.*]]
anatofuz
parents:
diff changeset
204 ; CHECK: cond_true2:
anatofuz
parents:
diff changeset
205 ; CHECK-NEXT: ret i32 [[X]]
anatofuz
parents:
diff changeset
206 ; CHECK: next2:
anatofuz
parents:
diff changeset
207 ; CHECK-NEXT: ret i32 0
anatofuz
parents:
diff changeset
208 ;
anatofuz
parents:
diff changeset
209 %v0 = call i32 @yogibar()
anatofuz
parents:
diff changeset
210 %v1 = call i32 @yogibar()
anatofuz
parents:
diff changeset
211 %cmp = icmp eq i32 %v0, %v1
anatofuz
parents:
diff changeset
212 br i1 %cmp, label %cond_true, label %next
anatofuz
parents:
diff changeset
213
anatofuz
parents:
diff changeset
214 cond_true:
anatofuz
parents:
diff changeset
215 ret i32 %v1
anatofuz
parents:
diff changeset
216
anatofuz
parents:
diff changeset
217 next:
anatofuz
parents:
diff changeset
218 %cmp2 = icmp eq i32 %x, %v0
anatofuz
parents:
diff changeset
219 br i1 %cmp2, label %cond_true2, label %next2
anatofuz
parents:
diff changeset
220
anatofuz
parents:
diff changeset
221 cond_true2:
anatofuz
parents:
diff changeset
222 ret i32 %v0
anatofuz
parents:
diff changeset
223
anatofuz
parents:
diff changeset
224 next2:
anatofuz
parents:
diff changeset
225 ret i32 0
anatofuz
parents:
diff changeset
226 }
anatofuz
parents:
diff changeset
227
anatofuz
parents:
diff changeset
228 define i32 @test12(i32 %x) {
anatofuz
parents:
diff changeset
229 ; CHECK-LABEL: @test12(
anatofuz
parents:
diff changeset
230 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 0
anatofuz
parents:
diff changeset
231 ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
anatofuz
parents:
diff changeset
232 ; CHECK: cond_true:
anatofuz
parents:
diff changeset
233 ; CHECK-NEXT: br label [[RET:%.*]]
anatofuz
parents:
diff changeset
234 ; CHECK: cond_false:
anatofuz
parents:
diff changeset
235 ; CHECK-NEXT: br label [[RET]]
anatofuz
parents:
diff changeset
236 ; CHECK: ret:
anatofuz
parents:
diff changeset
237 ; CHECK-NEXT: [[RES:%.*]] = phi i32 [ 0, [[COND_TRUE]] ], [ [[X]], [[COND_FALSE]] ]
anatofuz
parents:
diff changeset
238 ; CHECK-NEXT: ret i32 [[RES]]
anatofuz
parents:
diff changeset
239 ;
anatofuz
parents:
diff changeset
240 %cmp = icmp eq i32 %x, 0
anatofuz
parents:
diff changeset
241 br i1 %cmp, label %cond_true, label %cond_false
anatofuz
parents:
diff changeset
242
anatofuz
parents:
diff changeset
243 cond_true:
anatofuz
parents:
diff changeset
244 br label %ret
anatofuz
parents:
diff changeset
245
anatofuz
parents:
diff changeset
246 cond_false:
anatofuz
parents:
diff changeset
247 br label %ret
anatofuz
parents:
diff changeset
248
anatofuz
parents:
diff changeset
249 ret:
anatofuz
parents:
diff changeset
250 %res = phi i32 [ %x, %cond_true ], [ %x, %cond_false ]
anatofuz
parents:
diff changeset
251 ret i32 %res
anatofuz
parents:
diff changeset
252 }