Skip to content

Commit 489ea90

Browse files
committed
[VPlan] Free removeDeadRecipes from VPPhi simplification
VPPhi simplification is best done in simplifyRecipe.
1 parent 73bed64 commit 489ea90

24 files changed

+154
-238
lines changed

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -561,17 +561,23 @@ void VPlanTransforms::removeDeadRecipes(VPlan &Plan) {
561561
continue;
562562
}
563563

564-
// Check if R is a dead VPPhi <-> update cycle and remove it.
564+
// Remove dead VPPhi <-> update cycles.
565565
auto *PhiR = dyn_cast<VPPhi>(&R);
566-
if (!PhiR || PhiR->getNumOperands() != 2 || PhiR->getNumUsers() != 1)
566+
if (!PhiR)
567567
continue;
568-
VPValue *Incoming = PhiR->getOperand(1);
569-
if (*PhiR->user_begin() != Incoming->getDefiningRecipe() ||
570-
Incoming->getNumUsers() != 1)
571-
continue;
572-
PhiR->replaceAllUsesWith(PhiR->getOperand(0));
573-
PhiR->eraseFromParent();
574-
Incoming->getDefiningRecipe()->eraseFromParent();
568+
if (PhiR->getNumOperands() == 1) {
569+
PhiR->replaceAllUsesWith(PhiR->getOperand(0));
570+
PhiR->eraseFromParent();
571+
}
572+
if (PhiR->getNumOperands() == 2) {
573+
VPValue *Incoming = PhiR->getOperand(1);
574+
VPUser *U = PhiR->getUniqueUser();
575+
if (U && U == Incoming->getDefiningRecipe() && Incoming->hasOneUser()) {
576+
PhiR->replaceAllUsesWith(PhiR->getOperand(0));
577+
PhiR->eraseFromParent();
578+
Incoming->getDefiningRecipe()->eraseFromParent();
579+
}
580+
}
575581
}
576582
}
577583
}
@@ -1221,12 +1227,6 @@ static void simplifyRecipe(VPRecipeBase &R, VPTypeAnalysis &TypeInfo) {
12211227
return;
12221228
}
12231229

1224-
if (auto *Phi = dyn_cast<VPPhi>(Def)) {
1225-
if (Phi->getNumOperands() == 1)
1226-
Phi->replaceAllUsesWith(Phi->getOperand(0));
1227-
return;
1228-
}
1229-
12301230
// Some simplifications can only be applied after unrolling. Perform them
12311231
// below.
12321232
if (!Plan->isUnrolled())

llvm/lib/Transforms/Vectorize/VPlanValue.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ class LLVM_ABI_FOR_TEST VPValue {
111111
#endif
112112

113113
unsigned getNumUsers() const { return Users.size(); }
114+
bool hasOneUser() const { return Users.size() == 1; }
115+
VPUser *getUniqueUser() const {
116+
return hasOneUser() ? Users.front() : nullptr;
117+
}
114118
void addUser(VPUser &User) { Users.push_back(&User); }
115119

116120
/// Remove a single \p User from the list of users.

llvm/test/Transforms/LoopVectorize/AArch64/divs-with-scalable-vfs.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ exit:
9595
define void @sdiv_feeding_gep_predicated(ptr %dst, i32 %x, i64 %M, i64 %conv6, i64 %N) {
9696
; CHECK-LABEL: define void @sdiv_feeding_gep_predicated(
9797
; CHECK-SAME: ptr [[DST:%.*]], i32 [[X:%.*]], i64 [[M:%.*]], i64 [[CONV6:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
98-
; CHECK-NEXT: [[ENTRY:.*]]:
98+
; CHECK-NEXT: [[ENTRY:.*:]]
9999
; CHECK-NEXT: [[CONV61:%.*]] = zext i32 [[X]] to i64
100100
; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
101101
; CHECK: [[VECTOR_SCEVCHECK]]:
@@ -149,10 +149,9 @@ define void @sdiv_feeding_gep_predicated(ptr %dst, i32 %x, i64 %M, i64 %conv6, i
149149
; CHECK: [[MIDDLE_BLOCK]]:
150150
; CHECK-NEXT: br label %[[EXIT:.*]]
151151
; CHECK: [[SCALAR_PH]]:
152-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
153152
; CHECK-NEXT: br label %[[LOOP:.*]]
154153
; CHECK: [[LOOP]]:
155-
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
154+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
156155
; CHECK-NEXT: [[C:%.*]] = icmp ule i64 [[IV]], [[M]]
157156
; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[LOOP_LATCH]]
158157
; CHECK: [[THEN]]:
@@ -209,7 +208,7 @@ exit:
209208
define void @udiv_urem_feeding_gep(i64 %x, ptr %dst, i64 %N) {
210209
; CHECK-LABEL: define void @udiv_urem_feeding_gep(
211210
; CHECK-SAME: i64 [[X:%.*]], ptr [[DST:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
212-
; CHECK-NEXT: [[ENTRY:.*]]:
211+
; CHECK-NEXT: [[ENTRY:.*:]]
213212
; CHECK-NEXT: [[MUL_1_I:%.*]] = mul i64 [[X]], [[X]]
214213
; CHECK-NEXT: [[MUL_2_I:%.*]] = mul i64 [[MUL_1_I]], [[X]]
215214
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
@@ -267,10 +266,9 @@ define void @udiv_urem_feeding_gep(i64 %x, ptr %dst, i64 %N) {
267266
; CHECK: [[MIDDLE_BLOCK]]:
268267
; CHECK-NEXT: br label %[[EXIT:.*]]
269268
; CHECK: [[SCALAR_PH]]:
270-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
271269
; CHECK-NEXT: br label %[[LOOP:.*]]
272270
; CHECK: [[LOOP]]:
273-
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
271+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
274272
; CHECK-NEXT: [[DIV_I:%.*]] = udiv i64 [[IV]], [[MUL_2_I]]
275273
; CHECK-NEXT: [[REM_I:%.*]] = urem i64 [[IV]], [[MUL_2_I]]
276274
; CHECK-NEXT: [[DIV_1_I:%.*]] = udiv i64 [[REM_I]], [[MUL_1_I]]

llvm/test/Transforms/LoopVectorize/AArch64/induction-costs-sve.ll

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ define void @iv_casts(ptr %dst, ptr %src, i32 %x, i64 %N) #0 {
8585
;
8686
; PRED-LABEL: define void @iv_casts(
8787
; PRED-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], i32 [[X:%.*]], i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
88-
; PRED-NEXT: [[ENTRY:.*]]:
88+
; PRED-NEXT: [[ENTRY:.*:]]
8989
; PRED-NEXT: [[SRC2:%.*]] = ptrtoint ptr [[SRC]] to i64
9090
; PRED-NEXT: [[DST1:%.*]] = ptrtoint ptr [[DST]] to i64
9191
; PRED-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
@@ -129,10 +129,9 @@ define void @iv_casts(ptr %dst, ptr %src, i32 %x, i64 %N) #0 {
129129
; PRED: [[MIDDLE_BLOCK]]:
130130
; PRED-NEXT: br label %[[EXIT:.*]]
131131
; PRED: [[SCALAR_PH]]:
132-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_MEMCHECK]] ]
133132
; PRED-NEXT: br label %[[LOOP:.*]]
134133
; PRED: [[LOOP]]:
135-
; PRED-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
134+
; PRED-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
136135
; PRED-NEXT: [[GEP_SRC:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[IV]]
137136
; PRED-NEXT: [[L:%.*]] = load i8, ptr [[GEP_SRC]], align 1
138137
; PRED-NEXT: [[L_EXT:%.*]] = zext i8 [[L]] to i32
@@ -237,7 +236,7 @@ define void @iv_trunc(i32 %x, ptr %dst, i64 %N) #0 {
237236
;
238237
; PRED-LABEL: define void @iv_trunc(
239238
; PRED-SAME: i32 [[X:%.*]], ptr [[DST:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
240-
; PRED-NEXT: [[ENTRY:.*]]:
239+
; PRED-NEXT: [[ENTRY:.*:]]
241240
; PRED-NEXT: [[MUL_X:%.*]] = add i32 [[X]], 1
242241
; PRED-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
243242
; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
@@ -297,10 +296,9 @@ define void @iv_trunc(i32 %x, ptr %dst, i64 %N) #0 {
297296
; PRED: [[MIDDLE_BLOCK]]:
298297
; PRED-NEXT: br label %[[EXIT:.*]]
299298
; PRED: [[SCALAR_PH]]:
300-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
301299
; PRED-NEXT: br label %[[FOR_BODY:.*]]
302300
; PRED: [[FOR_BODY]]:
303-
; PRED-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[FOR_BODY]] ]
301+
; PRED-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[FOR_BODY]] ]
304302
; PRED-NEXT: [[TRUNC_IV:%.*]] = trunc i64 [[IV]] to i32
305303
; PRED-NEXT: [[ADD_I:%.*]] = mul i32 [[MUL_X]], [[TRUNC_IV]]
306304
; PRED-NEXT: [[IV_MUL:%.*]] = zext i32 [[ADD_I]] to i64
@@ -404,7 +402,7 @@ define void @trunc_ivs_and_store(i32 %x, ptr %dst, i64 %N) #0 {
404402
;
405403
; PRED-LABEL: define void @trunc_ivs_and_store(
406404
; PRED-SAME: i32 [[X:%.*]], ptr [[DST:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
407-
; PRED-NEXT: [[ENTRY:.*]]:
405+
; PRED-NEXT: [[ENTRY:.*:]]
408406
; PRED-NEXT: [[MUL:%.*]] = mul i32 [[X]], [[X]]
409407
; PRED-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
410408
; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
@@ -486,12 +484,10 @@ define void @trunc_ivs_and_store(i32 %x, ptr %dst, i64 %N) #0 {
486484
; PRED: [[MIDDLE_BLOCK]]:
487485
; PRED-NEXT: br label %[[EXIT:.*]]
488486
; PRED: [[SCALAR_PH]]:
489-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
490-
; PRED-NEXT: [[BC_RESUME_VAL8:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
491487
; PRED-NEXT: br label %[[LOOP:.*]]
492488
; PRED: [[LOOP]]:
493-
; PRED-NEXT: [[IV_1:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
494-
; PRED-NEXT: [[IV_2:%.*]] = phi i32 [ [[BC_RESUME_VAL8]], %[[SCALAR_PH]] ], [ [[IV_2_NEXT:%.*]], %[[LOOP]] ]
489+
; PRED-NEXT: [[IV_1:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
490+
; PRED-NEXT: [[IV_2:%.*]] = phi i32 [ 0, %[[SCALAR_PH]] ], [ [[IV_2_NEXT:%.*]], %[[LOOP]] ]
495491
; PRED-NEXT: [[IV_1_TRUNC:%.*]] = trunc i64 [[IV_1]] to i32
496492
; PRED-NEXT: [[IV_1_MUL:%.*]] = mul i32 [[MUL]], [[IV_1_TRUNC]]
497493
; PRED-NEXT: [[IV_2_NEXT]] = add i32 [[IV_2]], 1
@@ -596,7 +592,7 @@ define void @ivs_trunc_and_ext(i32 %x, ptr %dst, i64 %N) #0 {
596592
;
597593
; PRED-LABEL: define void @ivs_trunc_and_ext(
598594
; PRED-SAME: i32 [[X:%.*]], ptr [[DST:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
599-
; PRED-NEXT: [[ENTRY:.*]]:
595+
; PRED-NEXT: [[ENTRY:.*:]]
600596
; PRED-NEXT: [[ADD:%.*]] = add i32 [[X]], 1
601597
; PRED-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
602598
; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
@@ -677,12 +673,10 @@ define void @ivs_trunc_and_ext(i32 %x, ptr %dst, i64 %N) #0 {
677673
; PRED: [[MIDDLE_BLOCK]]:
678674
; PRED-NEXT: br label %[[EXIT:.*]]
679675
; PRED: [[SCALAR_PH]]:
680-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
681-
; PRED-NEXT: [[BC_RESUME_VAL7:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
682676
; PRED-NEXT: br label %[[LOOP:.*]]
683677
; PRED: [[LOOP]]:
684-
; PRED-NEXT: [[IV_1:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
685-
; PRED-NEXT: [[IV_2:%.*]] = phi i32 [ [[BC_RESUME_VAL7]], %[[SCALAR_PH]] ], [ [[IV_2_NEXT:%.*]], %[[LOOP]] ]
678+
; PRED-NEXT: [[IV_1:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
679+
; PRED-NEXT: [[IV_2:%.*]] = phi i32 [ 0, %[[SCALAR_PH]] ], [ [[IV_2_NEXT:%.*]], %[[LOOP]] ]
686680
; PRED-NEXT: [[IV_TRUNC:%.*]] = trunc i64 [[IV_1]] to i32
687681
; PRED-NEXT: [[IV_MUL:%.*]] = mul i32 [[ADD]], [[IV_TRUNC]]
688682
; PRED-NEXT: [[IV_2_NEXT]] = add i32 [[IV_2]], 1
@@ -769,7 +763,7 @@ define void @exit_cond_zext_iv(ptr %dst, i64 %N) {
769763
;
770764
; PRED-LABEL: define void @exit_cond_zext_iv(
771765
; PRED-SAME: ptr [[DST:%.*]], i64 [[N:%.*]]) {
772-
; PRED-NEXT: [[ENTRY:.*]]:
766+
; PRED-NEXT: [[ENTRY:.*:]]
773767
; PRED-NEXT: [[UMAX1:%.*]] = call i64 @llvm.umax.i64(i64 [[N]], i64 1)
774768
; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
775769
; PRED: [[VECTOR_SCEVCHECK]]:
@@ -817,12 +811,10 @@ define void @exit_cond_zext_iv(ptr %dst, i64 %N) {
817811
; PRED: [[MIDDLE_BLOCK]]:
818812
; PRED-NEXT: br label %[[EXIT:.*]]
819813
; PRED: [[SCALAR_PH]]:
820-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
821-
; PRED-NEXT: [[BC_RESUME_VAL6:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ]
822814
; PRED-NEXT: br label %[[LOOP:.*]]
823815
; PRED: [[LOOP]]:
824-
; PRED-NEXT: [[IV_1:%.*]] = phi i32 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
825-
; PRED-NEXT: [[IV_CONV:%.*]] = phi i64 [ [[BC_RESUME_VAL6]], %[[SCALAR_PH]] ], [ [[IV_EXT:%.*]], %[[LOOP]] ]
816+
; PRED-NEXT: [[IV_1:%.*]] = phi i32 [ 0, %[[SCALAR_PH]] ], [ [[IV_1_NEXT:%.*]], %[[LOOP]] ]
817+
; PRED-NEXT: [[IV_CONV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_EXT:%.*]], %[[LOOP]] ]
826818
; PRED-NEXT: [[GEP:%.*]] = getelementptr { [100 x i32], i32, i32 }, ptr [[DST]], i64 [[IV_CONV]], i32 2
827819
; PRED-NEXT: store i32 0, ptr [[GEP]], align 8
828820
; PRED-NEXT: [[IV_1_NEXT]] = add i32 [[IV_1]], 1

llvm/test/Transforms/LoopVectorize/AArch64/low_trip_count_predicates.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,9 @@ define void @overflow_indvar_known_false(ptr nocapture noundef %p, i32 noundef %
428428
; CHECK: [[MIDDLE_BLOCK]]:
429429
; CHECK-NEXT: br label %[[WHILE_END_LOOPEXIT:.*]]
430430
; CHECK: [[SCALAR_PH]]:
431-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[TMP0]], %[[WHILE_PREHEADER]] ], [ [[TMP0]], %[[VECTOR_SCEVCHECK]] ]
432431
; CHECK-NEXT: br label %[[WHILE_BODY:.*]]
433432
; CHECK: [[WHILE_BODY]]:
434-
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], %[[WHILE_BODY]] ]
433+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[TMP0]], %[[SCALAR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], %[[WHILE_BODY]] ]
435434
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
436435
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[V]], i64 [[INDVARS_IV]]
437436
; CHECK-NEXT: [[TMP18:%.*]] = load i8, ptr [[ARRAYIDX]], align 1

llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ target triple = "aarch64-unknown-linux"
88
define void @test_predicated_load_cast_hint(ptr %dst.1, ptr %dst.2, ptr %src, i8 %n, i64 %off) #0 {
99
; CHECK-LABEL: define void @test_predicated_load_cast_hint(
1010
; CHECK-SAME: ptr [[DST_1:%.*]], ptr [[DST_2:%.*]], ptr [[SRC:%.*]], i8 [[N:%.*]], i64 [[OFF:%.*]]) {
11-
; CHECK-NEXT: [[ENTRY:.*]]:
11+
; CHECK-NEXT: [[ENTRY:.*:]]
1212
; CHECK-NEXT: [[N_EXT:%.*]] = sext i8 [[N]] to i32
1313
; CHECK-NEXT: [[N_SUB:%.*]] = add i32 [[N_EXT]], -15
1414
; CHECK-NEXT: [[SMAX16:%.*]] = call i32 @llvm.smax.i32(i32 [[N_SUB]], i32 4)
@@ -269,10 +269,9 @@ define void @test_predicated_load_cast_hint(ptr %dst.1, ptr %dst.2, ptr %src, i8
269269
; CHECK: [[MIDDLE_BLOCK]]:
270270
; CHECK-NEXT: br label %[[EXIT:.*]]
271271
; CHECK: [[SCALAR_PH]]:
272-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i8 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_SCEVCHECK]] ], [ 0, %[[VECTOR_MEMCHECK]] ]
273272
; CHECK-NEXT: br label %[[LOOP:.*]]
274273
; CHECK: [[LOOP]]:
275-
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
274+
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
276275
; CHECK-NEXT: [[L:%.*]] = load i8, ptr [[SRC]], align 1
277276
; CHECK-NEXT: [[L_EXT:%.*]] = zext i8 [[L]] to i64
278277
; CHECK-NEXT: [[ADD:%.*]] = or i64 [[L_EXT]], 1

llvm/test/Transforms/LoopVectorize/AArch64/store-costs-sve.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,9 @@ define void @trunc_store(ptr %dst, ptr %src, i16 %x) #1 {
238238
; PRED: middle.block:
239239
; PRED-NEXT: br label [[EXIT:%.*]]
240240
; PRED: scalar.ph:
241-
; PRED-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_MEMCHECK]] ]
242241
; PRED-NEXT: br label [[LOOP:%.*]]
243242
; PRED: loop:
244-
; PRED-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
243+
; PRED-NEXT: [[IV:%.*]] = phi i64 [ 0, [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
245244
; PRED-NEXT: [[X_EXT:%.*]] = zext i16 [[X]] to i64
246245
; PRED-NEXT: [[L:%.*]] = load i64, ptr [[SRC]], align 8
247246
; PRED-NEXT: [[AND:%.*]] = and i64 [[L]], [[X_EXT]]

llvm/test/Transforms/LoopVectorize/ARM/mve-gather-scatter-tailpred.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,9 @@ define void @test_stride_loopinvar_4i32(ptr readonly %data, ptr noalias nocaptur
336336
; CHECK: middle.block:
337337
; CHECK-NEXT: br label [[END:%.*]]
338338
; CHECK: scalar.ph:
339-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ 0, [[VECTOR_SCEVCHECK]] ]
340339
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
341340
; CHECK: for.body:
342-
; CHECK-NEXT: [[I_023:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
341+
; CHECK-NEXT: [[I_023:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[SCALAR_PH]] ]
343342
; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i32 [[I_023]], [[STRIDE]]
344343
; CHECK-NEXT: [[ADD5:%.*]] = add nuw nsw i32 [[MUL]], 2
345344
; CHECK-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[DATA]], i32 [[ADD5]]

llvm/test/Transforms/LoopVectorize/ARM/mve-hoist-runtime-checks.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,9 @@ define void @diff_checks(ptr nocapture noundef writeonly %dst, ptr nocapture nou
7979
; CHECK: middle.block:
8080
; CHECK-NEXT: br label [[INNER_LOOP_EXIT]]
8181
; CHECK: scalar.ph:
82-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 0, [[OUTER_LOOP]] ], [ 0, [[VECTOR_MEMCHECK]] ]
8382
; CHECK-NEXT: br label [[INNER_LOOP:%.*]]
8483
; CHECK: inner.loop:
85-
; CHECK-NEXT: [[J_021_US:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INC_US:%.*]], [[INNER_LOOP]] ]
84+
; CHECK-NEXT: [[J_021_US:%.*]] = phi i32 [ 0, [[SCALAR_PH]] ], [ [[INC_US:%.*]], [[INNER_LOOP]] ]
8685
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr i32, ptr [[TMP7]], i32 [[J_021_US]]
8786
; CHECK-NEXT: [[TMP14:%.*]] = load i32, ptr [[ARRAYIDX_US]], align 4
8887
; CHECK-NEXT: [[ARRAYIDX8_US:%.*]] = getelementptr i32, ptr [[TMP8]], i32 [[J_021_US]]

llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ exit:
664664
define void @dead_load_in_block(ptr %dst, ptr %src, i8 %N, i64 %x) #0 {
665665
; CHECK-LABEL: define void @dead_load_in_block(
666666
; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], i8 [[N:%.*]], i64 [[X:%.*]]) #[[ATTR0]] {
667-
; CHECK-NEXT: [[ENTRY:.*]]:
667+
; CHECK-NEXT: [[ENTRY:.*:]]
668668
; CHECK-NEXT: [[N_EXT:%.*]] = zext i8 [[N]] to i64
669669
; CHECK-NEXT: [[UMIN7:%.*]] = call i64 @llvm.umin.i64(i64 [[N_EXT]], i64 1)
670670
; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[N_EXT]], [[UMIN7]]
@@ -716,10 +716,9 @@ define void @dead_load_in_block(ptr %dst, ptr %src, i8 %N, i64 %x) #0 {
716716
; CHECK: [[MIDDLE_BLOCK]]:
717717
; CHECK-NEXT: br label %[[EXIT:.*]]
718718
; CHECK: [[SCALAR_PH]]:
719-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ 0, %[[VECTOR_MEMCHECK]] ]
720719
; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
721720
; CHECK: [[LOOP_HEADER]]:
722-
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
721+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
723722
; CHECK-NEXT: [[L_0:%.*]] = load i32, ptr [[SRC]], align 4
724723
; CHECK-NEXT: [[C_0:%.*]] = icmp eq i32 [[L_0]], 0
725724
; CHECK-NEXT: br i1 [[C_0]], label %[[LOOP_LATCH]], label %[[THEN:.*]]

0 commit comments

Comments
 (0)