Skip to content

Commit d047342

Browse files
committed
[AlignmentFromAssumptions] Regenerate test checks (NFC)
1 parent 611ce24 commit d047342

File tree

1 file changed

+192
-70
lines changed
  • llvm/test/Transforms/AlignmentFromAssumptions

1 file changed

+192
-70
lines changed

llvm/test/Transforms/AlignmentFromAssumptions/simple.ll

Lines changed: 192 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,104 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
23
; RUN: opt < %s -passes=alignment-from-assumptions -S | FileCheck %s
34

4-
define i32 @foo(ptr nocapture %a) nounwind uwtable readonly {
5+
define i32 @foo(ptr nocapture %a) {
6+
; CHECK-LABEL: define i32 @foo
7+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
8+
; CHECK-NEXT: entry:
9+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 32) ]
10+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 32
11+
; CHECK-NEXT: ret i32 [[TMP0]]
12+
;
513
entry:
614
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 32)]
715
%0 = load i32, ptr %a, align 4
816
ret i32 %0
9-
10-
; CHECK-LABEL: @foo
11-
; CHECK: load i32, ptr {{[^,]+}}, align 32
12-
; CHECK: ret i32
1317
}
1418

15-
define i32 @foo2(ptr nocapture %a) nounwind uwtable readonly {
19+
define i32 @foo2(ptr nocapture %a) {
20+
; CHECK-LABEL: define i32 @foo2
21+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
22+
; CHECK-NEXT: entry:
23+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 32, i32 24) ]
24+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 -2
25+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 16
26+
; CHECK-NEXT: ret i32 [[TMP0]]
27+
;
1628
entry:
1729
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 32, i32 24)]
1830
%arrayidx = getelementptr inbounds i32, ptr %a, i64 -2
1931
%0 = load i32, ptr %arrayidx, align 4
2032
ret i32 %0
21-
22-
; CHECK-LABEL: @foo2
23-
; CHECK: load i32, ptr {{[^,]+}}, align 16
24-
; CHECK: ret i32
2533
}
2634

27-
define i32 @foo2a(ptr nocapture %a) nounwind uwtable readonly {
35+
define i32 @foo2a(ptr nocapture %a) {
36+
; CHECK-LABEL: define i32 @foo2a
37+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 32, i32 28) ]
40+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 1
41+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 32
42+
; CHECK-NEXT: ret i32 [[TMP0]]
43+
;
2844
entry:
2945
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 32, i32 28)]
3046
%arrayidx = getelementptr inbounds i32, ptr %a, i64 1
3147
%0 = load i32, ptr %arrayidx, align 4
3248
ret i32 %0
33-
34-
; CHECK-LABEL: @foo2a
35-
; CHECK: load i32, ptr {{[^,]+}}, align 32
36-
; CHECK: ret i32
3749
}
3850

3951
; TODO: this can be 8-bytes aligned
40-
define i32 @foo2b(ptr nocapture %a) nounwind uwtable readonly {
52+
define i32 @foo2b(ptr nocapture %a) {
53+
; CHECK-LABEL: define i32 @foo2b
54+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
55+
; CHECK-NEXT: entry:
56+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 32, i32 28) ]
57+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 -1
58+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
59+
; CHECK-NEXT: ret i32 [[TMP0]]
60+
;
4161
entry:
4262
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 32, i32 28)]
4363
%arrayidx = getelementptr inbounds i32, ptr %a, i64 -1
4464
%0 = load i32, ptr %arrayidx, align 4
4565
ret i32 %0
46-
47-
; CHECK-LABEL: @foo2b
48-
; CHECK: load i32, ptr {{[^,]+}}, align 4
49-
; CHECK: ret i32
5066
}
5167

52-
define i32 @goo(ptr nocapture %a) nounwind uwtable readonly {
68+
define i32 @goo(ptr nocapture %a) {
69+
; CHECK-LABEL: define i32 @goo
70+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
71+
; CHECK-NEXT: entry:
72+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 32, i32 0) ]
73+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 32
74+
; CHECK-NEXT: ret i32 [[TMP0]]
75+
;
5376
entry:
5477
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 32, i32 0)]
5578
%0 = load i32, ptr %a, align 4
5679
ret i32 %0
57-
58-
; CHECK-LABEL: @goo
59-
; CHECK: load i32, ptr {{[^,]+}}, align 32
60-
; CHECK: ret i32
6180
}
6281

63-
define i32 @hoo(ptr nocapture %a) nounwind uwtable readonly {
82+
define i32 @hoo(ptr nocapture %a) {
83+
; CHECK-LABEL: define i32 @hoo
84+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
85+
; CHECK-NEXT: entry:
86+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i64 32, i32 0) ]
87+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
88+
; CHECK: for.body:
89+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
90+
; CHECK-NEXT: [[R_06:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
91+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[INDVARS_IV]]
92+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 32
93+
; CHECK-NEXT: [[ADD]] = add nsw i32 [[TMP0]], [[R_06]]
94+
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add i64 [[INDVARS_IV]], 8
95+
; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
96+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 2048
97+
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
98+
; CHECK: for.end:
99+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
100+
; CHECK-NEXT: ret i32 [[ADD_LCSSA]]
101+
;
64102
entry:
65103
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i64 32, i32 0)]
66104
br label %for.body
@@ -79,10 +117,6 @@ for.body: ; preds = %entry, %for.body
79117
for.end: ; preds = %for.body
80118
%add.lcssa = phi i32 [ %add, %for.body ]
81119
ret i32 %add.lcssa
82-
83-
; CHECK-LABEL: @hoo
84-
; CHECK: load i32, ptr %arrayidx, align 32
85-
; CHECK: ret i32 %add.lcssa
86120
}
87121

88122
; test D66575
@@ -91,7 +125,41 @@ for.end: ; preds = %for.body
91125
; for i1 in range(0, 4096, 32):
92126
; for i2 in range(0, 4096, 32):
93127
; load(a, i0+i1+i2+32)
94-
define void @hoo2(ptr nocapture %a, i64 %id, i64 %num) nounwind uwtable readonly {
128+
define void @hoo2(ptr nocapture %a, i64 %id, i64 %num) {
129+
; CHECK-LABEL: define void @hoo2
130+
; CHECK-SAME: (ptr nocapture [[A:%.*]], i64 [[ID:%.*]], i64 [[NUM:%.*]]) {
131+
; CHECK-NEXT: entry:
132+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i8 32, i64 0) ]
133+
; CHECK-NEXT: [[ID_MUL:%.*]] = shl nsw i64 [[ID]], 6
134+
; CHECK-NEXT: [[NUM_MUL:%.*]] = shl nsw i64 [[NUM]], 6
135+
; CHECK-NEXT: br label [[FOR0_BODY:%.*]]
136+
; CHECK: for0.body:
137+
; CHECK-NEXT: [[I0:%.*]] = phi i64 [ [[ID_MUL]], [[ENTRY:%.*]] ], [ [[I0_NEXT:%.*]], [[FOR0_END:%.*]] ]
138+
; CHECK-NEXT: br label [[FOR1_BODY:%.*]]
139+
; CHECK: for1.body:
140+
; CHECK-NEXT: [[I1:%.*]] = phi i64 [ 0, [[FOR0_BODY]] ], [ [[I1_NEXT:%.*]], [[FOR1_END:%.*]] ]
141+
; CHECK-NEXT: br label [[FOR2_BODY:%.*]]
142+
; CHECK: for2.body:
143+
; CHECK-NEXT: [[I2:%.*]] = phi i64 [ 0, [[FOR1_BODY]] ], [ [[I2_NEXT:%.*]], [[FOR2_BODY]] ]
144+
; CHECK-NEXT: [[T1:%.*]] = add nuw nsw i64 [[I0]], [[I1]]
145+
; CHECK-NEXT: [[T2:%.*]] = add nuw nsw i64 [[T1]], [[I2]]
146+
; CHECK-NEXT: [[T3:%.*]] = add nuw nsw i64 [[T2]], 32
147+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[T3]]
148+
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ARRAYIDX]], align 32
149+
; CHECK-NEXT: [[I2_NEXT]] = add nuw nsw i64 [[I2]], 32
150+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i64 [[I2_NEXT]], 4096
151+
; CHECK-NEXT: br i1 [[CMP2]], label [[FOR2_BODY]], label [[FOR1_END]]
152+
; CHECK: for1.end:
153+
; CHECK-NEXT: [[I1_NEXT]] = add nuw nsw i64 [[I1]], 32
154+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i64 [[I1_NEXT]], 4096
155+
; CHECK-NEXT: br i1 [[CMP1]], label [[FOR1_BODY]], label [[FOR0_END]]
156+
; CHECK: for0.end:
157+
; CHECK-NEXT: [[I0_NEXT]] = add nuw nsw i64 [[I0]], [[NUM_MUL]]
158+
; CHECK-NEXT: [[CMP0:%.*]] = icmp ult i64 [[I0_NEXT]], 4096
159+
; CHECK-NEXT: br i1 [[CMP0]], label [[FOR0_BODY]], label [[RETURN:%.*]]
160+
; CHECK: return:
161+
; CHECK-NEXT: ret void
162+
;
95163
entry:
96164
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i8 32, i64 0)]
97165
%id.mul = shl nsw i64 %id, 6
@@ -131,13 +199,28 @@ for0.end:
131199

132200
return:
133201
ret void
134-
135-
; CHECK-LABEL: @hoo2
136-
; CHECK: load i32, ptr %arrayidx, align 32
137-
; CHECK: ret void
138202
}
139203

140-
define i32 @joo(ptr nocapture %a) nounwind uwtable readonly {
204+
define i32 @joo(ptr nocapture %a) {
205+
; CHECK-LABEL: define i32 @joo
206+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
207+
; CHECK-NEXT: entry:
208+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i8 32, i8 0) ]
209+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
210+
; CHECK: for.body:
211+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 4, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
212+
; CHECK-NEXT: [[R_06:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
213+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[INDVARS_IV]]
214+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 16
215+
; CHECK-NEXT: [[ADD]] = add nsw i32 [[TMP0]], [[R_06]]
216+
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add i64 [[INDVARS_IV]], 8
217+
; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
218+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 2048
219+
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
220+
; CHECK: for.end:
221+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
222+
; CHECK-NEXT: ret i32 [[ADD_LCSSA]]
223+
;
141224
entry:
142225
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i8 32, i8 0)]
143226
br label %for.body
@@ -156,13 +239,28 @@ for.body: ; preds = %entry, %for.body
156239
for.end: ; preds = %for.body
157240
%add.lcssa = phi i32 [ %add, %for.body ]
158241
ret i32 %add.lcssa
159-
160-
; CHECK-LABEL: @joo
161-
; CHECK: load i32, ptr %arrayidx, align 16
162-
; CHECK: ret i32 %add.lcssa
163242
}
164243

165-
define i32 @koo(ptr nocapture %a) nounwind uwtable readonly {
244+
define i32 @koo(ptr nocapture %a) {
245+
; CHECK-LABEL: define i32 @koo
246+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
247+
; CHECK-NEXT: entry:
248+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
249+
; CHECK: for.body:
250+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
251+
; CHECK-NEXT: [[R_06:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
252+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[INDVARS_IV]]
253+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i8 32, i8 0) ]
254+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 16
255+
; CHECK-NEXT: [[ADD]] = add nsw i32 [[TMP0]], [[R_06]]
256+
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add i64 [[INDVARS_IV]], 4
257+
; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
258+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 2048
259+
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
260+
; CHECK: for.end:
261+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
262+
; CHECK-NEXT: ret i32 [[ADD_LCSSA]]
263+
;
166264
entry:
167265
br label %for.body
168266

@@ -181,13 +279,28 @@ for.body: ; preds = %entry, %for.body
181279
for.end: ; preds = %for.body
182280
%add.lcssa = phi i32 [ %add, %for.body ]
183281
ret i32 %add.lcssa
184-
185-
; CHECK-LABEL: @koo
186-
; CHECK: load i32, ptr %arrayidx, align 16
187-
; CHECK: ret i32 %add.lcssa
188282
}
189283

190-
define i32 @koo2(ptr nocapture %a) nounwind uwtable readonly {
284+
define i32 @koo2(ptr nocapture %a) {
285+
; CHECK-LABEL: define i32 @koo2
286+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
287+
; CHECK-NEXT: entry:
288+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i128 32, i128 0) ]
289+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
290+
; CHECK: for.body:
291+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ -4, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
292+
; CHECK-NEXT: [[R_06:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
293+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[INDVARS_IV]]
294+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 16
295+
; CHECK-NEXT: [[ADD]] = add nsw i32 [[TMP0]], [[R_06]]
296+
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add i64 [[INDVARS_IV]], 4
297+
; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
298+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], 2048
299+
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
300+
; CHECK: for.end:
301+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
302+
; CHECK-NEXT: ret i32 [[ADD_LCSSA]]
303+
;
191304
entry:
192305
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i128 32, i128 0)]
193306
br label %for.body
@@ -206,57 +319,66 @@ for.body: ; preds = %entry, %for.body
206319
for.end: ; preds = %for.body
207320
%add.lcssa = phi i32 [ %add, %for.body ]
208321
ret i32 %add.lcssa
209-
210-
; CHECK-LABEL: @koo2
211-
; CHECK: load i32, ptr %arrayidx, align 16
212-
; CHECK: ret i32 %add.lcssa
213322
}
214323

215-
define i32 @moo(ptr nocapture %a) nounwind uwtable {
324+
define i32 @moo(ptr nocapture %a) {
325+
; CHECK-LABEL: define i32 @moo
326+
; CHECK-SAME: (ptr nocapture [[A:%.*]]) {
327+
; CHECK-NEXT: entry:
328+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i16 32) ]
329+
; CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr align 32 [[A]], i8 0, i64 64, i1 false)
330+
; CHECK-NEXT: ret i32 undef
331+
;
216332
entry:
217333
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i16 32)]
218334
tail call void @llvm.memset.p0.i64(ptr align 4 %a, i8 0, i64 64, i1 false)
219335
ret i32 undef
220-
221-
; CHECK-LABEL: @moo
222-
; CHECK: @llvm.memset.p0.i64(ptr align 32 %a, i8 0, i64 64, i1 false)
223-
; CHECK: ret i32 undef
224336
}
225337

226-
define i32 @moo2(ptr nocapture %a, ptr nocapture %b) nounwind uwtable {
338+
define i32 @moo2(ptr nocapture %a, ptr nocapture %b) {
339+
; CHECK-LABEL: define i32 @moo2
340+
; CHECK-SAME: (ptr nocapture [[A:%.*]], ptr nocapture [[B:%.*]]) {
341+
; CHECK-NEXT: entry:
342+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[B]], i32 128) ]
343+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i16 32) ]
344+
; CHECK-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr align 32 [[A]], ptr align 128 [[B]], i64 64, i1 false)
345+
; CHECK-NEXT: ret i32 undef
346+
;
227347
entry:
228348
tail call void @llvm.assume(i1 true) ["align"(ptr %b, i32 128)]
229349
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i16 32)]
230350
tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %a, ptr align 4 %b, i64 64, i1 false)
231351
ret i32 undef
232-
233-
; CHECK-LABEL: @moo2
234-
; CHECK: @llvm.memcpy.p0.p0.i64(ptr align 32 %a, ptr align 128 %b, i64 64, i1 false)
235-
; CHECK: ret i32 undef
236352
}
237353

238-
define i32 @moo3(ptr nocapture %a, ptr nocapture %b) nounwind uwtable {
354+
define i32 @moo3(ptr nocapture %a, ptr nocapture %b) {
355+
; CHECK-LABEL: define i32 @moo3
356+
; CHECK-SAME: (ptr nocapture [[A:%.*]], ptr nocapture [[B:%.*]]) {
357+
; CHECK-NEXT: entry:
358+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i16 32), "align"(ptr [[B]], i32 128) ]
359+
; CHECK-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr align 32 [[A]], ptr align 128 [[B]], i64 64, i1 false)
360+
; CHECK-NEXT: ret i32 undef
361+
;
239362
entry:
240363
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i16 32), "align"(ptr %b, i32 128)]
241364
tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %a, ptr align 4 %b, i64 64, i1 false)
242365
ret i32 undef
243-
244-
; CHECK-LABEL: @moo3
245-
; CHECK: @llvm.memcpy.p0.p0.i64(ptr align 32 %a, ptr align 128 %b, i64 64, i1 false)
246-
; CHECK: ret i32 undef
247366
}
248367

249368

250369
; Variable alignments appear to be legal, don't crash
251-
define i32 @pr51680(ptr nocapture %a, i32 %align) nounwind uwtable readonly {
370+
define i32 @pr51680(ptr nocapture %a, i32 %align) {
371+
; CHECK-LABEL: define i32 @pr51680
372+
; CHECK-SAME: (ptr nocapture [[A:%.*]], i32 [[ALIGN:%.*]]) {
373+
; CHECK-NEXT: entry:
374+
; CHECK-NEXT: tail call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i32 [[ALIGN]]) ]
375+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
376+
; CHECK-NEXT: ret i32 [[TMP0]]
377+
;
252378
entry:
253379
tail call void @llvm.assume(i1 true) ["align"(ptr %a, i32 %align)]
254380
%0 = load i32, ptr %a, align 4
255381
ret i32 %0
256-
257-
; CHECK-LABEL: @pr51680
258-
; CHECK: load i32, ptr {{[^,]+}}, align 4
259-
; CHECK: ret i32
260382
}
261383

262384
declare void @llvm.assume(i1) nounwind

0 commit comments

Comments
 (0)