@@ -9,54 +9,13 @@ define void @vscale_mul_4(ptr noalias noundef readonly captures(none) %a, ptr no
9
9
; CHECK-NEXT: [[ENTRY:.*]]:
10
10
; CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
11
11
; CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[TMP0]], 2
12
- ; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
13
- ; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 8
14
- ; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP1]], [[TMP3]]
15
- ; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
16
- ; CHECK: [[VECTOR_PH]]:
17
- ; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.vscale.i64()
18
- ; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], 8
19
- ; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP1]], [[TMP5]]
20
- ; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP1]], [[N_MOD_VF]]
21
12
; CHECK-NEXT: [[TMP10:%.*]] = call i64 @llvm.vscale.i64()
22
13
; CHECK-NEXT: [[TMP7:%.*]] = mul i64 [[TMP10]], 8
23
- ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
24
- ; CHECK: [[VECTOR_BODY]]:
25
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
26
- ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDEX]]
27
- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw float, ptr [[TMP13]], i32 0
28
- ; CHECK-NEXT: [[TMP18:%.*]] = call i64 @llvm.vscale.i64()
29
- ; CHECK-NEXT: [[TMP11:%.*]] = mul i64 [[TMP18]], 4
30
- ; CHECK-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw float, ptr [[TMP13]], i64 [[TMP11]]
31
- ; CHECK-NEXT: [[WIDE_LOAD2:%.*]] = load <vscale x 4 x float>, ptr [[TMP14]], align 4
32
- ; CHECK-NEXT: [[WIDE_LOAD1:%.*]] = load <vscale x 4 x float>, ptr [[TMP26]], align 4
33
- ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw float, ptr [[B]], i64 [[INDEX]]
34
- ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw float, ptr [[TMP12]], i32 0
35
- ; CHECK-NEXT: [[TMP15:%.*]] = call i64 @llvm.vscale.i64()
36
- ; CHECK-NEXT: [[TMP16:%.*]] = mul i64 [[TMP15]], 4
37
- ; CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw float, ptr [[TMP12]], i64 [[TMP16]]
38
- ; CHECK-NEXT: [[WIDE_LOAD3:%.*]] = load <vscale x 4 x float>, ptr [[TMP17]], align 4
39
- ; CHECK-NEXT: [[WIDE_LOAD4:%.*]] = load <vscale x 4 x float>, ptr [[TMP27]], align 4
40
- ; CHECK-NEXT: [[TMP19:%.*]] = fmul <vscale x 4 x float> [[WIDE_LOAD2]], [[WIDE_LOAD3]]
41
- ; CHECK-NEXT: [[TMP28:%.*]] = fmul <vscale x 4 x float> [[WIDE_LOAD1]], [[WIDE_LOAD4]]
42
- ; CHECK-NEXT: [[TMP20:%.*]] = call i64 @llvm.vscale.i64()
43
- ; CHECK-NEXT: [[TMP21:%.*]] = mul i64 [[TMP20]], 4
44
- ; CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw float, ptr [[TMP12]], i64 [[TMP21]]
45
- ; CHECK-NEXT: store <vscale x 4 x float> [[TMP19]], ptr [[TMP17]], align 4
46
- ; CHECK-NEXT: store <vscale x 4 x float> [[TMP28]], ptr [[TMP22]], align 4
47
- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP7]]
48
- ; CHECK-NEXT: [[TMP23:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
49
- ; CHECK-NEXT: br i1 [[TMP23]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
50
- ; CHECK: [[MIDDLE_BLOCK]]:
51
- ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP1]], [[N_VEC]]
52
- ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[SCALAR_PH]]
53
- ; CHECK: [[SCALAR_PH]]:
54
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
55
14
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
56
- ; CHECK: [[FOR_COND_CLEANUP]]:
15
+ ; CHECK: [[FOR_COND_CLEANUP:.* ]]:
57
16
; CHECK-NEXT: ret void
58
17
; CHECK: [[FOR_BODY]]:
59
- ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]] , %[[SCALAR_PH ]] ], [ [[INDVARS_IV_NEXT:%.*]], %[[FOR_BODY]] ]
18
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0 , %[[ENTRY ]] ], [ [[INDVARS_IV_NEXT:%.*]], %[[FOR_BODY]] ]
60
19
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDVARS_IV]]
61
20
; CHECK-NEXT: [[TMP24:%.*]] = load float, ptr [[ARRAYIDX]], align 4
62
21
; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds nuw float, ptr [[B]], i64 [[INDVARS_IV]]
@@ -65,7 +24,7 @@ define void @vscale_mul_4(ptr noalias noundef readonly captures(none) %a, ptr no
65
24
; CHECK-NEXT: store float [[MUL4]], ptr [[ARRAYIDX3]], align 4
66
25
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
67
26
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[TMP1]]
68
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP3 :![0-9]+]]
27
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP0 :![0-9]+]]
69
28
;
70
29
entry:
71
30
%0 = tail call i64 @llvm.vscale.i64 ()
@@ -136,7 +95,7 @@ define void @vscale_mul_8(ptr noalias noundef readonly captures(none) %a, ptr n
136
95
; CHECK-NEXT: store float [[MUL5]], ptr [[ARRAYIDX4]], align 4
137
96
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
138
97
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[MUL1]]
139
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
98
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP3 :![0-9]+]]
140
99
;
141
100
entry:
142
101
%0 = tail call i64 @llvm.vscale.i64 ()
@@ -167,9 +126,6 @@ define void @vscale_mul_12(ptr noalias noundef readonly captures(none) %a, ptr n
167
126
; CHECK-NEXT: [[MUL1:%.*]] = mul nuw nsw i64 [[TMP0]], 12
168
127
; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()
169
128
; CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP1]], 8
170
- ; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[MUL1]], [[TMP2]]
171
- ; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
172
- ; CHECK: [[VECTOR_PH]]:
173
129
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.vscale.i64()
174
130
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 8
175
131
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[MUL1]], [[TMP4]]
@@ -178,7 +134,7 @@ define void @vscale_mul_12(ptr noalias noundef readonly captures(none) %a, ptr n
178
134
; CHECK-NEXT: [[TMP6:%.*]] = mul i64 [[TMP5]], 8
179
135
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
180
136
; CHECK: [[VECTOR_BODY]]:
181
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
137
+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
182
138
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDEX]]
183
139
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw float, ptr [[TMP7]], i32 0
184
140
; CHECK-NEXT: [[TMP9:%.*]] = call i64 @llvm.vscale.i64()
@@ -202,17 +158,14 @@ define void @vscale_mul_12(ptr noalias noundef readonly captures(none) %a, ptr n
202
158
; CHECK-NEXT: store <vscale x 4 x float> [[TMP25]], ptr [[TMP21]], align 4
203
159
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP6]]
204
160
; CHECK-NEXT: [[TMP22:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
205
- ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP5 :![0-9]+]]
161
+ ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
206
162
; CHECK: [[MIDDLE_BLOCK]]:
207
163
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[MUL1]], [[N_VEC]]
208
- ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[SCALAR_PH]]
209
- ; CHECK: [[SCALAR_PH]]:
210
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
211
- ; CHECK-NEXT: br label %[[FOR_BODY:.*]]
164
+ ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[FOR_BODY:.*]]
212
165
; CHECK: [[FOR_COND_CLEANUP]]:
213
166
; CHECK-NEXT: ret void
214
167
; CHECK: [[FOR_BODY]]:
215
- ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL ]], %[[SCALAR_PH ]] ], [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ]
168
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ], [ [[N_VEC ]], %[[MIDDLE_BLOCK ]] ]
216
169
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDVARS_IV]]
217
170
; CHECK-NEXT: [[TMP23:%.*]] = load float, ptr [[ARRAYIDX]], align 4
218
171
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw float, ptr [[B]], i64 [[INDVARS_IV]]
@@ -221,7 +174,7 @@ define void @vscale_mul_12(ptr noalias noundef readonly captures(none) %a, ptr n
221
174
; CHECK-NEXT: store float [[MUL5]], ptr [[ARRAYIDX4]], align 4
222
175
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
223
176
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[MUL1]]
224
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
177
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP5 :![0-9]+]]
225
178
;
226
179
entry:
227
180
%0 = tail call i64 @llvm.vscale.i64 ()
@@ -252,9 +205,6 @@ define void @vscale_mul_31(ptr noalias noundef readonly captures(none) %a, ptr n
252
205
; CHECK-NEXT: [[MUL1:%.*]] = mul nuw nsw i64 [[TMP0]], 31
253
206
; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()
254
207
; CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP1]], 8
255
- ; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[MUL1]], [[TMP2]]
256
- ; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
257
- ; CHECK: [[VECTOR_PH]]:
258
208
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.vscale.i64()
259
209
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 8
260
210
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[MUL1]], [[TMP4]]
@@ -263,7 +213,7 @@ define void @vscale_mul_31(ptr noalias noundef readonly captures(none) %a, ptr n
263
213
; CHECK-NEXT: [[TMP6:%.*]] = mul i64 [[TMP5]], 8
264
214
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
265
215
; CHECK: [[VECTOR_BODY]]:
266
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
216
+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
267
217
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDEX]]
268
218
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw float, ptr [[TMP7]], i32 0
269
219
; CHECK-NEXT: [[TMP9:%.*]] = call i64 @llvm.vscale.i64()
@@ -287,17 +237,14 @@ define void @vscale_mul_31(ptr noalias noundef readonly captures(none) %a, ptr n
287
237
; CHECK-NEXT: store <vscale x 4 x float> [[TMP18]], ptr [[TMP21]], align 4
288
238
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP6]]
289
239
; CHECK-NEXT: [[TMP22:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
290
- ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
240
+ ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
291
241
; CHECK: [[MIDDLE_BLOCK]]:
292
242
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[MUL1]], [[N_VEC]]
293
- ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[SCALAR_PH]]
294
- ; CHECK: [[SCALAR_PH]]:
295
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
296
- ; CHECK-NEXT: br label %[[FOR_BODY:.*]]
243
+ ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[FOR_BODY:.*]]
297
244
; CHECK: [[FOR_COND_CLEANUP]]:
298
245
; CHECK-NEXT: ret void
299
246
; CHECK: [[FOR_BODY]]:
300
- ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL ]], %[[SCALAR_PH ]] ], [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ]
247
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ], [ [[N_VEC ]], %[[MIDDLE_BLOCK ]] ]
301
248
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDVARS_IV]]
302
249
; CHECK-NEXT: [[TMP23:%.*]] = load float, ptr [[ARRAYIDX]], align 4
303
250
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw float, ptr [[B]], i64 [[INDVARS_IV]]
@@ -306,7 +253,7 @@ define void @vscale_mul_31(ptr noalias noundef readonly captures(none) %a, ptr n
306
253
; CHECK-NEXT: store float [[MUL5]], ptr [[ARRAYIDX4]], align 4
307
254
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
308
255
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[MUL1]]
309
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
256
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
310
257
;
311
258
entry:
312
259
%0 = tail call i64 @llvm.vscale.i64 ()
@@ -337,9 +284,6 @@ define void @vscale_mul_64(ptr noalias noundef readonly captures(none) %a, ptr n
337
284
; CHECK-NEXT: [[MUL1:%.*]] = mul nuw nsw i64 [[TMP0]], 64
338
285
; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()
339
286
; CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP1]], 8
340
- ; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[MUL1]], [[TMP2]]
341
- ; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
342
- ; CHECK: [[VECTOR_PH]]:
343
287
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.vscale.i64()
344
288
; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 8
345
289
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[MUL1]], [[TMP4]]
@@ -348,7 +292,7 @@ define void @vscale_mul_64(ptr noalias noundef readonly captures(none) %a, ptr n
348
292
; CHECK-NEXT: [[TMP6:%.*]] = mul i64 [[TMP5]], 8
349
293
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
350
294
; CHECK: [[VECTOR_BODY]]:
351
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
295
+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY ]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
352
296
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDEX]]
353
297
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw float, ptr [[TMP7]], i32 0
354
298
; CHECK-NEXT: [[TMP9:%.*]] = call i64 @llvm.vscale.i64()
@@ -372,17 +316,14 @@ define void @vscale_mul_64(ptr noalias noundef readonly captures(none) %a, ptr n
372
316
; CHECK-NEXT: store <vscale x 4 x float> [[TMP18]], ptr [[TMP21]], align 4
373
317
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP6]]
374
318
; CHECK-NEXT: [[TMP22:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
375
- ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9 :![0-9]+]]
319
+ ; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
376
320
; CHECK: [[MIDDLE_BLOCK]]:
377
321
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[MUL1]], [[N_VEC]]
378
- ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[SCALAR_PH]]
379
- ; CHECK: [[SCALAR_PH]]:
380
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
381
- ; CHECK-NEXT: br label %[[FOR_BODY:.*]]
322
+ ; CHECK-NEXT: br i1 [[CMP_N]], label %[[FOR_COND_CLEANUP:.*]], label %[[FOR_BODY:.*]]
382
323
; CHECK: [[FOR_COND_CLEANUP]]:
383
324
; CHECK-NEXT: ret void
384
325
; CHECK: [[FOR_BODY]]:
385
- ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL ]], %[[SCALAR_PH ]] ], [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ]
326
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.* ]], %[[FOR_BODY ]] ], [ [[N_VEC ]], %[[MIDDLE_BLOCK ]] ]
386
327
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[A]], i64 [[INDVARS_IV]]
387
328
; CHECK-NEXT: [[TMP23:%.*]] = load float, ptr [[ARRAYIDX]], align 4
388
329
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw float, ptr [[B]], i64 [[INDVARS_IV]]
@@ -391,7 +332,7 @@ define void @vscale_mul_64(ptr noalias noundef readonly captures(none) %a, ptr n
391
332
; CHECK-NEXT: store float [[MUL5]], ptr [[ARRAYIDX4]], align 4
392
333
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
393
334
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[MUL1]]
394
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP10 :![0-9]+]]
335
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !llvm.loop [[LOOP9 :![0-9]+]]
395
336
;
396
337
entry:
397
338
%0 = tail call i64 @llvm.vscale.i64 ()
@@ -419,14 +360,13 @@ declare i64 @llvm.vscale.i64()
419
360
attributes #0 = { vscale_range(1 ,16 ) "target-features" ="+sve" }
420
361
;.
421
362
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
422
- ; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1 }
423
- ; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable" }
424
- ; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2 ]], [[META1 ]]}
363
+ ; CHECK: [[META1]] = !{!"llvm.loop.unroll.runtime.disable" }
364
+ ; CHECK: [[META2]] = !{!"llvm.loop.isvectorized", i32 1 }
365
+ ; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META1 ]], [[META2 ]]}
425
366
; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META2]], [[META1]]}
426
367
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
427
368
; CHECK: [[LOOP6]] = distinct !{[[LOOP6]], [[META2]], [[META1]]}
428
369
; CHECK: [[LOOP7]] = distinct !{[[LOOP7]], [[META1]], [[META2]]}
429
370
; CHECK: [[LOOP8]] = distinct !{[[LOOP8]], [[META2]], [[META1]]}
430
371
; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]], [[META2]]}
431
- ; CHECK: [[LOOP10]] = distinct !{[[LOOP10]], [[META2]], [[META1]]}
432
372
;.
0 commit comments