Skip to content

Commit ed90f8b

Browse files
author
git apple-llvm automerger
committed
Merge commit '85ac59e5390e' from apple/master into swift/master-next
2 parents c235900 + 85ac59e commit ed90f8b

File tree

1 file changed

+378
-0
lines changed
  • llvm/test/Transforms/CorrelatedValuePropagation

1 file changed

+378
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,378 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -correlated-propagation -cvp-dont-add-nowrap-flags=false -S | FileCheck %s
3+
4+
define i8 @test0(i8 %a, i8 %b) {
5+
; CHECK-LABEL: @test0(
6+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[A:%.*]], [[B:%.*]]
7+
; CHECK-NEXT: ret i8 [[SHL]]
8+
;
9+
%shl = shl i8 %a, %b
10+
ret i8 %shl
11+
}
12+
13+
define i8 @test1(i8 %a, i8 %b) {
14+
; CHECK-LABEL: @test1(
15+
; CHECK-NEXT: entry:
16+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 8
17+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
18+
; CHECK: bb:
19+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]
20+
; CHECK-NEXT: ret i8 [[SHL]]
21+
; CHECK: exit:
22+
; CHECK-NEXT: ret i8 0
23+
;
24+
entry:
25+
%cmp = icmp ult i8 %b, 8
26+
br i1 %cmp, label %bb, label %exit
27+
28+
bb:
29+
%shl = shl i8 %a, %b
30+
ret i8 %shl
31+
32+
exit:
33+
ret i8 0
34+
}
35+
36+
define i8 @test2(i8 %a, i8 %b) {
37+
; CHECK-LABEL: @test2(
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 9
40+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
41+
; CHECK: bb:
42+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]
43+
; CHECK-NEXT: ret i8 [[SHL]]
44+
; CHECK: exit:
45+
; CHECK-NEXT: ret i8 0
46+
;
47+
entry:
48+
%cmp = icmp ult i8 %b, 9
49+
br i1 %cmp, label %bb, label %exit
50+
51+
bb:
52+
%shl = shl i8 %a, %b
53+
ret i8 %shl
54+
55+
exit:
56+
ret i8 0
57+
}
58+
59+
define i8 @test3(i8 %a, i8 %b) {
60+
; CHECK-LABEL: @test3(
61+
; CHECK-NEXT: entry:
62+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[B:%.*]], 6
63+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
64+
; CHECK: bb:
65+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]
66+
; CHECK-NEXT: ret i8 [[SHL]]
67+
; CHECK: exit:
68+
; CHECK-NEXT: ret i8 0
69+
;
70+
entry:
71+
%cmp = icmp ugt i8 %b, 6
72+
br i1 %cmp, label %bb, label %exit
73+
74+
bb:
75+
%shl = shl i8 %a, %b
76+
ret i8 %shl
77+
78+
exit:
79+
ret i8 0
80+
}
81+
82+
define i8 @test4(i8 %a, i8 %b) {
83+
; CHECK-LABEL: @test4(
84+
; CHECK-NEXT: entry:
85+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[B:%.*]], 7
86+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
87+
; CHECK: bb:
88+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[A:%.*]], [[B]]
89+
; CHECK-NEXT: ret i8 [[SHL]]
90+
; CHECK: exit:
91+
; CHECK-NEXT: ret i8 0
92+
;
93+
entry:
94+
%cmp = icmp ugt i8 %b, 7
95+
br i1 %cmp, label %bb, label %exit
96+
97+
bb:
98+
%shl = shl i8 %a, %b
99+
ret i8 %shl
100+
101+
exit:
102+
ret i8 0
103+
}
104+
105+
define i8 @test5(i8 %b) {
106+
; CHECK-LABEL: @test5(
107+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 0, [[B:%.*]]
108+
; CHECK-NEXT: ret i8 [[SHL]]
109+
;
110+
%shl = shl i8 0, %b
111+
ret i8 %shl
112+
}
113+
114+
define i8 @test6(i8 %b) {
115+
; CHECK-LABEL: @test6(
116+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 1, [[B:%.*]]
117+
; CHECK-NEXT: ret i8 [[SHL]]
118+
;
119+
%shl = shl i8 1, %b
120+
ret i8 %shl
121+
}
122+
123+
define i8 @test7(i8 %b) {
124+
; CHECK-LABEL: @test7(
125+
; CHECK-NEXT: entry:
126+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 7
127+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
128+
; CHECK: bb:
129+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 1, [[B]]
130+
; CHECK-NEXT: ret i8 [[SHL]]
131+
; CHECK: exit:
132+
; CHECK-NEXT: ret i8 0
133+
;
134+
entry:
135+
%cmp = icmp ult i8 %b, 7
136+
br i1 %cmp, label %bb, label %exit
137+
138+
bb:
139+
%shl = shl i8 1, %b
140+
ret i8 %shl
141+
142+
exit:
143+
ret i8 0
144+
}
145+
146+
define i8 @test8(i8 %b) {
147+
; CHECK-LABEL: @test8(
148+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -1, [[B:%.*]]
149+
; CHECK-NEXT: ret i8 [[SHL]]
150+
;
151+
%shl = shl i8 -1, %b
152+
ret i8 %shl
153+
}
154+
155+
define i8 @test9(i8 %b) {
156+
; CHECK-LABEL: @test9(
157+
; CHECK-NEXT: entry:
158+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[B:%.*]], 0
159+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
160+
; CHECK: bb:
161+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -1, [[B]]
162+
; CHECK-NEXT: ret i8 -1
163+
; CHECK: exit:
164+
; CHECK-NEXT: ret i8 0
165+
;
166+
entry:
167+
%cmp = icmp eq i8 %b, 0
168+
br i1 %cmp, label %bb, label %exit
169+
170+
bb:
171+
%shl = shl i8 -1, %b
172+
ret i8 %shl
173+
174+
exit:
175+
ret i8 0
176+
}
177+
178+
define i8 @test10(i8 %b) {
179+
; CHECK-LABEL: @test10(
180+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B:%.*]]
181+
; CHECK-NEXT: ret i8 [[SHL]]
182+
;
183+
%shl = shl i8 42, %b
184+
ret i8 %shl
185+
}
186+
187+
define i8 @test11(i8 %b) {
188+
; CHECK-LABEL: @test11(
189+
; CHECK-NEXT: entry:
190+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 2
191+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
192+
; CHECK: bb:
193+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
194+
; CHECK-NEXT: ret i8 [[SHL]]
195+
; CHECK: exit:
196+
; CHECK-NEXT: ret i8 0
197+
;
198+
entry:
199+
%cmp = icmp ult i8 %b, 2
200+
br i1 %cmp, label %bb, label %exit
201+
202+
bb:
203+
%shl = shl i8 42, %b
204+
ret i8 %shl
205+
206+
exit:
207+
ret i8 0
208+
}
209+
210+
define i8 @test12(i8 %b) {
211+
; CHECK-LABEL: @test12(
212+
; CHECK-NEXT: entry:
213+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 3
214+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
215+
; CHECK: bb:
216+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
217+
; CHECK-NEXT: ret i8 [[SHL]]
218+
; CHECK: exit:
219+
; CHECK-NEXT: ret i8 0
220+
;
221+
entry:
222+
%cmp = icmp ult i8 %b, 3
223+
br i1 %cmp, label %bb, label %exit
224+
225+
bb:
226+
%shl = shl i8 42, %b
227+
ret i8 %shl
228+
229+
exit:
230+
ret i8 0
231+
}
232+
233+
define i8 @test13(i8 %b) {
234+
; CHECK-LABEL: @test13(
235+
; CHECK-NEXT: entry:
236+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 4
237+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
238+
; CHECK: bb:
239+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
240+
; CHECK-NEXT: ret i8 [[SHL]]
241+
; CHECK: exit:
242+
; CHECK-NEXT: ret i8 0
243+
;
244+
entry:
245+
%cmp = icmp ult i8 %b, 4
246+
br i1 %cmp, label %bb, label %exit
247+
248+
bb:
249+
%shl = shl i8 42, %b
250+
ret i8 %shl
251+
252+
exit:
253+
ret i8 0
254+
}
255+
256+
define i8 @test14(i8 %b) {
257+
; CHECK-LABEL: @test14(
258+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -42, [[B:%.*]]
259+
; CHECK-NEXT: ret i8 [[SHL]]
260+
;
261+
%shl = shl i8 -42, %b
262+
ret i8 %shl
263+
}
264+
265+
define i8 @test15(i8 %b) {
266+
; CHECK-LABEL: @test15(
267+
; CHECK-NEXT: entry:
268+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 2
269+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
270+
; CHECK: bb:
271+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -42, [[B]]
272+
; CHECK-NEXT: ret i8 [[SHL]]
273+
; CHECK: exit:
274+
; CHECK-NEXT: ret i8 0
275+
;
276+
entry:
277+
%cmp = icmp ult i8 %b, 2
278+
br i1 %cmp, label %bb, label %exit
279+
280+
bb:
281+
%shl = shl i8 -42, %b
282+
ret i8 %shl
283+
284+
exit:
285+
ret i8 0
286+
}
287+
288+
define i8 @test16(i8 %b) {
289+
; CHECK-LABEL: @test16(
290+
; CHECK-NEXT: entry:
291+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[B:%.*]], 3
292+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
293+
; CHECK: bb:
294+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -42, [[B]]
295+
; CHECK-NEXT: ret i8 [[SHL]]
296+
; CHECK: exit:
297+
; CHECK-NEXT: ret i8 0
298+
;
299+
entry:
300+
%cmp = icmp ult i8 %b, 3
301+
br i1 %cmp, label %bb, label %exit
302+
303+
bb:
304+
%shl = shl i8 -42, %b
305+
ret i8 %shl
306+
307+
exit:
308+
ret i8 0
309+
}
310+
311+
define i8 @test17(i8 %b) {
312+
; CHECK-LABEL: @test17(
313+
; CHECK-NEXT: entry:
314+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 2
315+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
316+
; CHECK: bb:
317+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
318+
; CHECK-NEXT: ret i8 [[SHL]]
319+
; CHECK: exit:
320+
; CHECK-NEXT: ret i8 0
321+
;
322+
entry:
323+
%cmp = icmp slt i8 %b, 2
324+
br i1 %cmp, label %bb, label %exit
325+
326+
bb:
327+
%shl = shl i8 42, %b
328+
ret i8 %shl
329+
330+
exit:
331+
ret i8 0
332+
}
333+
334+
define i8 @test18(i8 %b) {
335+
; CHECK-LABEL: @test18(
336+
; CHECK-NEXT: entry:
337+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 3
338+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
339+
; CHECK: bb:
340+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
341+
; CHECK-NEXT: ret i8 [[SHL]]
342+
; CHECK: exit:
343+
; CHECK-NEXT: ret i8 0
344+
;
345+
entry:
346+
%cmp = icmp slt i8 %b, 3
347+
br i1 %cmp, label %bb, label %exit
348+
349+
bb:
350+
%shl = shl i8 42, %b
351+
ret i8 %shl
352+
353+
exit:
354+
ret i8 0
355+
}
356+
357+
define i8 @test19(i8 %b) {
358+
; CHECK-LABEL: @test19(
359+
; CHECK-NEXT: entry:
360+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[B:%.*]], 4
361+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
362+
; CHECK: bb:
363+
; CHECK-NEXT: [[SHL:%.*]] = shl i8 42, [[B]]
364+
; CHECK-NEXT: ret i8 [[SHL]]
365+
; CHECK: exit:
366+
; CHECK-NEXT: ret i8 0
367+
;
368+
entry:
369+
%cmp = icmp slt i8 %b, 4
370+
br i1 %cmp, label %bb, label %exit
371+
372+
bb:
373+
%shl = shl i8 42, %b
374+
ret i8 %shl
375+
376+
exit:
377+
ret i8 0
378+
}

0 commit comments

Comments
 (0)