@@ -24,17 +24,17 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
24
24
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 64, [[N_MOD_VF]]
25
25
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.vscale.i64()
26
26
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], 16
27
- ; CHECK-NEXT: [[INDEX_NEXT1 :%.*]] = add i64 3, [[N_VEC]]
27
+ ; CHECK-NEXT: [[TMP6 :%.*]] = add i64 3, [[N_VEC]]
28
28
; CHECK-NEXT: [[TMP7:%.*]] = call <vscale x 16 x i64> @llvm.stepvector.nxv16i64()
29
29
; CHECK-NEXT: [[TMP8:%.*]] = mul <vscale x 16 x i64> [[TMP7]], splat (i64 1)
30
30
; CHECK-NEXT: [[INDUCTION:%.*]] = add <vscale x 16 x i64> splat (i64 3), [[TMP8]]
31
31
; CHECK-NEXT: [[TMP9:%.*]] = mul i64 1, [[TMP5]]
32
32
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i64> poison, i64 [[TMP9]], i64 0
33
33
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i64> [[DOTSPLATINSERT]], <vscale x 16 x i64> poison, <vscale x 16 x i32> zeroinitializer
34
- ; CHECK-NEXT: br label [[LOOP :%.*]]
34
+ ; CHECK-NEXT: br label [[VECTOR_BODY :%.*]]
35
35
; CHECK: vector.body:
36
- ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[LOOP ]] ]
37
- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 16 x i64> [ [[INDUCTION]], [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[LOOP ]] ]
36
+ ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY ]] ]
37
+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 16 x i64> [ [[INDUCTION]], [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY ]] ]
38
38
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
39
39
; CHECK-NEXT: [[TMP10:%.*]] = add i64 [[OFFSET_IDX]], 0
40
40
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[TMP10]]
@@ -50,33 +50,33 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
50
50
; CHECK-NEXT: [[TMP18:%.*]] = icmp eq i64 [[INDEX_NEXT3]], [[N_VEC]]
51
51
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <vscale x 16 x i64> [[VEC_IND]], [[DOTSPLAT]]
52
52
; CHECK-NEXT: [[TMP19:%.*]] = or i1 [[TMP17]], [[TMP18]]
53
- ; CHECK-NEXT: br i1 [[TMP19]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP ]], !llvm.loop [[LOOP0:![0-9]+]]
53
+ ; CHECK-NEXT: br i1 [[TMP19]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY ]], !llvm.loop [[LOOP0:![0-9]+]]
54
54
; CHECK: middle.split:
55
- ; CHECK-NEXT: br i1 [[TMP17]], label [[VECTOR_EARLY_EXIT:%.*]], label [[LOOP_INC :%.*]]
55
+ ; CHECK-NEXT: br i1 [[TMP17]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK :%.*]]
56
56
; CHECK: vector.early.exit:
57
- ; CHECK-NEXT: [[TMP20 :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.nxv16i1(<vscale x 16 x i1> [[TMP16]], i1 true)
58
- ; CHECK-NEXT: [[TMP21 :%.*]] = extractelement <vscale x 16 x i64> [[VEC_IND]], i64 [[TMP20 ]]
57
+ ; CHECK-NEXT: [[FIRST_ACTIVE_LANE :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.nxv16i1(<vscale x 16 x i1> [[TMP16]], i1 true)
58
+ ; CHECK-NEXT: [[TMP20 :%.*]] = extractelement <vscale x 16 x i64> [[VEC_IND]], i64 [[FIRST_ACTIVE_LANE ]]
59
59
; CHECK-NEXT: br label [[LOOP_END:%.*]]
60
60
; CHECK: middle.block:
61
61
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 64, [[N_VEC]]
62
62
; CHECK-NEXT: br i1 [[CMP_N]], label [[LOOP_END]], label [[SCALAR_PH]]
63
63
; CHECK: scalar.ph:
64
- ; CHECK-NEXT: [[INDEX2 :%.*]] = phi i64 [ [[INDEX_NEXT1 ]], [[LOOP_INC ]] ], [ 3, [[ENTRY:%.*]] ]
65
- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
64
+ ; CHECK-NEXT: [[BC_RESUME_VAL :%.*]] = phi i64 [ [[TMP6 ]], [[MIDDLE_BLOCK ]] ], [ 3, [[ENTRY:%.*]] ]
65
+ ; CHECK-NEXT: br label [[LOOP :%.*]]
66
66
; CHECK: loop:
67
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC1 :%.*]] ], [ [[INDEX2 ]], [[SCALAR_PH]] ]
67
+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC :%.*]] ], [ [[BC_RESUME_VAL ]], [[SCALAR_PH]] ]
68
68
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
69
69
; CHECK-NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
70
70
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
71
71
; CHECK-NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
72
72
; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
73
- ; CHECK-NEXT: br i1 [[CMP3]], label [[LOOP_INC1 ]], label [[LOOP_END]]
73
+ ; CHECK-NEXT: br i1 [[CMP3]], label [[LOOP_INC ]], label [[LOOP_END]]
74
74
; CHECK: loop.inc:
75
75
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
76
76
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
77
- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]], !llvm.loop [[LOOP3:![0-9]+]]
77
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]], !llvm.loop [[LOOP3:![0-9]+]]
78
78
; CHECK: loop.end:
79
- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ 67, [[LOOP_INC1 ]] ], [ 67, [[LOOP_INC ]] ], [ [[TMP21 ]], [[VECTOR_EARLY_EXIT]] ]
79
+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ 67, [[LOOP_INC ]] ], [ 67, [[MIDDLE_BLOCK ]] ], [ [[TMP20 ]], [[VECTOR_EARLY_EXIT]] ]
80
80
; CHECK-NEXT: ret i64 [[RETVAL]]
81
81
;
82
82
entry:
@@ -117,10 +117,10 @@ define i64 @same_exit_block_pre_inc_use4() {
117
117
; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
118
118
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
119
119
; CHECK: vector.ph:
120
- ; CHECK-NEXT: br label [[LOOP :%.*]]
120
+ ; CHECK-NEXT: br label [[VECTOR_BODY :%.*]]
121
121
; CHECK: vector.body:
122
- ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[LOOP ]] ]
123
- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[LOOP ]] ]
122
+ ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY ]] ]
123
+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY ]] ]
124
124
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
125
125
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[OFFSET_IDX]], 0
126
126
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i64, ptr [[P1]], i64 [[TMP0]]
@@ -133,18 +133,18 @@ define i64 @same_exit_block_pre_inc_use4() {
133
133
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
134
134
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <2 x i64> [[VEC_IND]], splat (i64 2)
135
135
; CHECK-NEXT: [[TMP7:%.*]] = or i1 [[TMP5]], [[TMP6]]
136
- ; CHECK-NEXT: br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP ]], !llvm.loop [[LOOP4:![0-9]+]]
136
+ ; CHECK-NEXT: br i1 [[TMP7]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY ]], !llvm.loop [[LOOP4:![0-9]+]]
137
137
; CHECK: middle.split:
138
138
; CHECK-NEXT: br i1 [[TMP5]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
139
139
; CHECK: vector.early.exit:
140
- ; CHECK-NEXT: [[TMP8 :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v2i1(<2 x i1> [[TMP4]], i1 true)
141
- ; CHECK-NEXT: [[TMP9 :%.*]] = extractelement <2 x i64> [[VEC_IND]], i64 [[TMP8 ]]
140
+ ; CHECK-NEXT: [[FIRST_ACTIVE_LANE :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v2i1(<2 x i1> [[TMP4]], i1 true)
141
+ ; CHECK-NEXT: [[TMP8 :%.*]] = extractelement <2 x i64> [[VEC_IND]], i64 [[FIRST_ACTIVE_LANE ]]
142
142
; CHECK-NEXT: br label [[LOOP_END:%.*]]
143
143
; CHECK: middle.block:
144
144
; CHECK-NEXT: br i1 true, label [[LOOP_END]], label [[SCALAR_PH]]
145
145
; CHECK: scalar.ph:
146
146
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 67, [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
147
- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
147
+ ; CHECK-NEXT: br label [[LOOP :%.*]]
148
148
; CHECK: loop:
149
149
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
150
150
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i64, ptr [[P1]], i64 [[INDEX]]
@@ -154,9 +154,9 @@ define i64 @same_exit_block_pre_inc_use4() {
154
154
; CHECK: loop.inc:
155
155
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
156
156
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
157
- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]], !llvm.loop [[LOOP5:![0-9]+]]
157
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]], !llvm.loop [[LOOP5:![0-9]+]]
158
158
; CHECK: loop.end:
159
- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP9 ]], [[VECTOR_EARLY_EXIT]] ]
159
+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP8 ]], [[VECTOR_EARLY_EXIT]] ]
160
160
; CHECK-NEXT: ret i64 [[RETVAL]]
161
161
;
162
162
entry:
@@ -215,8 +215,8 @@ define i64 @loop_contains_safe_call() #1 {
215
215
; CHECK: middle.split:
216
216
; CHECK-NEXT: br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
217
217
; CHECK: vector.early.exit:
218
- ; CHECK-NEXT: [[TMP9 :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP5]], i1 true)
219
- ; CHECK-NEXT: [[TMP10 :%.*]] = extractelement <4 x i64> [[VEC_IND]], i64 [[TMP9 ]]
218
+ ; CHECK-NEXT: [[FIRST_ACTIVE_LANE :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP5]], i1 true)
219
+ ; CHECK-NEXT: [[TMP9 :%.*]] = extractelement <4 x i64> [[VEC_IND]], i64 [[FIRST_ACTIVE_LANE ]]
220
220
; CHECK-NEXT: br label [[LOOP_END:%.*]]
221
221
; CHECK: middle.block:
222
222
; CHECK-NEXT: br i1 true, label [[LOOP_END]], label [[SCALAR_PH]]
@@ -235,7 +235,7 @@ define i64 @loop_contains_safe_call() #1 {
235
235
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
236
236
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP7:![0-9]+]]
237
237
; CHECK: loop.end:
238
- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP10 ]], [[VECTOR_EARLY_EXIT]] ]
238
+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP9 ]], [[VECTOR_EARLY_EXIT]] ]
239
239
; CHECK-NEXT: ret i64 [[RETVAL]]
240
240
;
241
241
entry:
@@ -274,10 +274,10 @@ define i64 @loop_contains_safe_div() #1 {
274
274
; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
275
275
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
276
276
; CHECK: vector.ph:
277
- ; CHECK-NEXT: br label [[LOOP :%.*]]
277
+ ; CHECK-NEXT: br label [[VECTOR_BODY :%.*]]
278
278
; CHECK: vector.body:
279
- ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[LOOP ]] ]
280
- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[LOOP ]] ]
279
+ ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT2:%.*]], [[VECTOR_BODY ]] ]
280
+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 3, i64 4>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY ]] ]
281
281
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
282
282
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[OFFSET_IDX]], 0
283
283
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[TMP0]]
@@ -291,18 +291,18 @@ define i64 @loop_contains_safe_div() #1 {
291
291
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
292
292
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <2 x i64> [[VEC_IND]], splat (i64 2)
293
293
; CHECK-NEXT: [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
294
- ; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP ]], !llvm.loop [[LOOP8:![0-9]+]]
294
+ ; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY ]], !llvm.loop [[LOOP8:![0-9]+]]
295
295
; CHECK: middle.split:
296
296
; CHECK-NEXT: br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
297
297
; CHECK: vector.early.exit:
298
- ; CHECK-NEXT: [[TMP9 :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v2i1(<2 x i1> [[TMP5]], i1 true)
299
- ; CHECK-NEXT: [[TMP10 :%.*]] = extractelement <2 x i64> [[VEC_IND]], i64 [[TMP9 ]]
298
+ ; CHECK-NEXT: [[FIRST_ACTIVE_LANE :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v2i1(<2 x i1> [[TMP5]], i1 true)
299
+ ; CHECK-NEXT: [[TMP9 :%.*]] = extractelement <2 x i64> [[VEC_IND]], i64 [[FIRST_ACTIVE_LANE ]]
300
300
; CHECK-NEXT: br label [[LOOP_END:%.*]]
301
301
; CHECK: middle.block:
302
302
; CHECK-NEXT: br i1 true, label [[LOOP_END]], label [[SCALAR_PH]]
303
303
; CHECK: scalar.ph:
304
304
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 67, [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
305
- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
305
+ ; CHECK-NEXT: br label [[LOOP :%.*]]
306
306
; CHECK: loop:
307
307
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
308
308
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[INDEX]]
@@ -313,9 +313,9 @@ define i64 @loop_contains_safe_div() #1 {
313
313
; CHECK: loop.inc:
314
314
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
315
315
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
316
- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]], !llvm.loop [[LOOP9:![0-9]+]]
316
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]], !llvm.loop [[LOOP9:![0-9]+]]
317
317
; CHECK: loop.end:
318
- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP10 ]], [[VECTOR_EARLY_EXIT]] ]
318
+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[TMP9 ]], [[VECTOR_EARLY_EXIT]] ]
319
319
; CHECK-NEXT: ret i64 [[RETVAL]]
320
320
;
321
321
entry:
@@ -356,10 +356,10 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
356
356
; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
357
357
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
358
358
; CHECK: vector.ph:
359
- ; CHECK-NEXT: br label [[LOOP :%.*]]
359
+ ; CHECK-NEXT: br label [[VECTOR_BODY :%.*]]
360
360
; CHECK: vector.body:
361
- ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[LOOP ]] ]
362
- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 3, i64 4, i64 5, i64 6>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[LOOP ]] ]
361
+ ; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT3:%.*]], [[VECTOR_BODY ]] ]
362
+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 3, i64 4, i64 5, i64 6>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY ]] ]
363
363
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
364
364
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[OFFSET_IDX]], 0
365
365
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[TMP0]]
@@ -375,19 +375,19 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
375
375
; CHECK-NEXT: [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
376
376
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
377
377
; CHECK-NEXT: [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
378
- ; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[LOOP ]], !llvm.loop [[LOOP10:![0-9]+]]
378
+ ; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY ]], !llvm.loop [[LOOP10:![0-9]+]]
379
379
; CHECK: middle.split:
380
380
; CHECK-NEXT: [[TMP10:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
381
381
; CHECK-NEXT: br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
382
382
; CHECK: vector.early.exit:
383
- ; CHECK-NEXT: [[TMP11 :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 true)
384
- ; CHECK-NEXT: [[TMP12 :%.*]] = extractelement <4 x i64> [[VEC_IND]], i64 [[TMP11 ]]
383
+ ; CHECK-NEXT: [[FIRST_ACTIVE_LANE :%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP6]], i1 true)
384
+ ; CHECK-NEXT: [[TMP11 :%.*]] = extractelement <4 x i64> [[VEC_IND]], i64 [[FIRST_ACTIVE_LANE ]]
385
385
; CHECK-NEXT: br label [[LOOP_END:%.*]]
386
386
; CHECK: middle.block:
387
387
; CHECK-NEXT: br i1 true, label [[LOOP_END]], label [[SCALAR_PH]]
388
388
; CHECK: scalar.ph:
389
389
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 67, [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
390
- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
390
+ ; CHECK-NEXT: br label [[LOOP :%.*]]
391
391
; CHECK: loop:
392
392
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
393
393
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[INDEX]]
@@ -399,9 +399,9 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
399
399
; CHECK-NEXT: [[LD2:%.*]] = load i64, ptr [[ARRAYIDX2]], align 8
400
400
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
401
401
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
402
- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]], !llvm.loop [[LOOP11:![0-9]+]]
402
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]], !llvm.loop [[LOOP11:![0-9]+]]
403
403
; CHECK: loop.end:
404
- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ [[LD2]], [[LOOP_INC]] ], [ [[TMP10]], [[MIDDLE_BLOCK]] ], [ [[TMP12 ]], [[VECTOR_EARLY_EXIT]] ]
404
+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ [[LD2]], [[LOOP_INC]] ], [ [[TMP10]], [[MIDDLE_BLOCK]] ], [ [[TMP11 ]], [[VECTOR_EARLY_EXIT]] ]
405
405
; CHECK-NEXT: ret i64 [[RETVAL]]
406
406
;
407
407
entry:
0 commit comments