Skip to content

Commit 02e5552

Browse files
committed
Address review comments
1 parent 69b05fe commit 02e5552

File tree

2 files changed

+137
-25
lines changed

2 files changed

+137
-25
lines changed

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,8 @@ static VPWidenInductionRecipe *getOptimizableIVOf(VPValue *VPV) {
730730
return IsWideIVInc() ? WideIV : nullptr;
731731
}
732732

733+
/// Attempts to optimize the induction variable exit values for users in the
734+
/// exit block coming from the latch in the original scalar loop.
733735
static VPValue *
734736
optimizeLatchExitInductionUser(VPlan &Plan, VPTypeAnalysis &TypeInfo,
735737
VPBlockBase *PredVPBB, VPValue *Op,
@@ -748,35 +750,35 @@ optimizeLatchExitInductionUser(VPlan &Plan, VPTypeAnalysis &TypeInfo,
748750
VPValue *EndValue = EndValues.lookup(WideIV);
749751
assert(EndValue && "end value must have been pre-computed");
750752

751-
// This only happens if Incoming is the increment of an induction recipe.
753+
// `getOptimizableIVOf()` always returns the pre-incremented IV, so if it
754+
// changed it means the exit is using the incremented value, so we don't
755+
// need to subtract the step.
752756
if (Incoming != WideIV)
753757
return EndValue;
754758

755-
// Otherwise subtract the step from the EndValue.
759+
// Otherwise, subtract the step from the EndValue.
756760
VPBuilder B(cast<VPBasicBlock>(PredVPBB)->getTerminator());
757761
VPValue *Step = WideIV->getStepValue();
758762
Type *ScalarTy = TypeInfo.inferScalarType(WideIV);
759-
VPValue *Escape = nullptr;
760-
if (ScalarTy->isIntegerTy()) {
761-
Escape =
762-
B.createNaryOp(Instruction::Sub, {EndValue, Step}, {}, "ind.escape");
763-
} else if (ScalarTy->isPointerTy()) {
763+
if (ScalarTy->isIntegerTy())
764+
return B.createNaryOp(Instruction::Sub, {EndValue, Step}, {}, "ind.escape");
765+
if (ScalarTy->isPointerTy()) {
764766
auto *Zero = Plan.getOrAddLiveIn(
765767
ConstantInt::get(Step->getLiveInIRValue()->getType(), 0));
766-
Escape =
767-
B.createPtrAdd(EndValue, B.createNaryOp(Instruction::Sub, {Zero, Step}),
768-
{}, "ind.escape");
769-
} else if (ScalarTy->isFloatingPointTy()) {
768+
return B.createPtrAdd(EndValue,
769+
B.createNaryOp(Instruction::Sub, {Zero, Step}), {},
770+
"ind.escape");
771+
}
772+
if (ScalarTy->isFloatingPointTy()) {
770773
const auto &ID = WideIV->getInductionDescriptor();
771-
Escape = B.createNaryOp(
774+
return B.createNaryOp(
772775
ID.getInductionBinOp()->getOpcode() == Instruction::FAdd
773776
? Instruction::FSub
774777
: Instruction::FAdd,
775778
{EndValue, Step}, {ID.getInductionBinOp()->getFastMathFlags()});
776-
} else {
777-
llvm_unreachable("all possible induction types must be handled");
778779
}
779-
return Escape;
780+
llvm_unreachable("all possible induction types must be handled");
781+
return nullptr;
780782
}
781783

782784
void VPlanTransforms::optimizeInductionExitUsers(

llvm/test/Transforms/LoopVectorize/single_early_exit_live_outs.ll

Lines changed: 120 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,114 @@ loop.end:
12051205
ret i64 %retval2
12061206
}
12071207

1208+
define i64 @diff_exit_block_post_inc_use3(i64 %start) {
1209+
; CHECK-LABEL: define i64 @diff_exit_block_post_inc_use3(
1210+
; CHECK-SAME: i64 [[START:%.*]]) {
1211+
; CHECK-NEXT: entry:
1212+
; CHECK-NEXT: [[P1:%.*]] = alloca [1024 x i8], align 1
1213+
; CHECK-NEXT: [[P2:%.*]] = alloca [1024 x i8], align 1
1214+
; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
1215+
; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
1216+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1217+
; CHECK: vector.ph:
1218+
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[START]], 64
1219+
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
1220+
; CHECK: vector.body:
1221+
; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT4:%.*]], [[VECTOR_BODY]] ]
1222+
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 3, [[INDEX1]]
1223+
; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[OFFSET_IDX]], 0
1224+
; CHECK-NEXT: [[OFFSET_IDX2:%.*]] = add i64 [[START]], [[INDEX1]]
1225+
; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[OFFSET_IDX2]], 0
1226+
; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[OFFSET_IDX2]], 1
1227+
; CHECK-NEXT: [[TMP4:%.*]] = add i64 [[OFFSET_IDX2]], 2
1228+
; CHECK-NEXT: [[TMP5:%.*]] = add i64 [[OFFSET_IDX2]], 3
1229+
; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[TMP2]], 1
1230+
; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[TMP3]], 1
1231+
; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP4]], 1
1232+
; CHECK-NEXT: [[TMP9:%.*]] = add i64 [[TMP5]], 1
1233+
; CHECK-NEXT: [[TMP10:%.*]] = insertelement <4 x i64> poison, i64 [[TMP6]], i32 0
1234+
; CHECK-NEXT: [[TMP11:%.*]] = insertelement <4 x i64> [[TMP10]], i64 [[TMP7]], i32 1
1235+
; CHECK-NEXT: [[TMP12:%.*]] = insertelement <4 x i64> [[TMP11]], i64 [[TMP8]], i32 2
1236+
; CHECK-NEXT: [[TMP13:%.*]] = insertelement <4 x i64> [[TMP12]], i64 [[TMP9]], i32 3
1237+
; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[TMP1]]
1238+
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds i8, ptr [[TMP14]], i32 0
1239+
; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP15]], align 1
1240+
; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[TMP1]]
1241+
; CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds i8, ptr [[TMP16]], i32 0
1242+
; CHECK-NEXT: [[WIDE_LOAD3:%.*]] = load <4 x i8>, ptr [[TMP17]], align 1
1243+
; CHECK-NEXT: [[TMP18:%.*]] = icmp eq <4 x i8> [[WIDE_LOAD]], [[WIDE_LOAD3]]
1244+
; CHECK-NEXT: [[INDEX_NEXT4]] = add nuw i64 [[INDEX1]], 4
1245+
; CHECK-NEXT: [[TMP19:%.*]] = xor <4 x i1> [[TMP18]], splat (i1 true)
1246+
; CHECK-NEXT: [[TMP20:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP19]])
1247+
; CHECK-NEXT: [[TMP21:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 64
1248+
; CHECK-NEXT: [[TMP22:%.*]] = or i1 [[TMP20]], [[TMP21]]
1249+
; CHECK-NEXT: br i1 [[TMP22]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP30:![0-9]+]]
1250+
; CHECK: middle.split:
1251+
; CHECK-NEXT: br i1 [[TMP20]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
1252+
; CHECK: middle.block:
1253+
; CHECK-NEXT: [[IND_ESCAPE:%.*]] = sub i64 [[TMP0]], 1
1254+
; CHECK-NEXT: br i1 true, label [[LOOP_END:%.*]], label [[SCALAR_PH]]
1255+
; CHECK: vector.early.exit:
1256+
; CHECK-NEXT: [[FIRST_ACTIVE_LANE:%.*]] = call i64 @llvm.experimental.cttz.elts.i64.v4i1(<4 x i1> [[TMP19]], i1 true)
1257+
; CHECK-NEXT: [[EARLY_EXIT_VALUE:%.*]] = extractelement <4 x i64> [[TMP13]], i64 [[FIRST_ACTIVE_LANE]]
1258+
; CHECK-NEXT: br label [[LOOP_EARLY_EXIT:%.*]]
1259+
; CHECK: scalar.ph:
1260+
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 67, [[MIDDLE_BLOCK]] ], [ 3, [[ENTRY:%.*]] ]
1261+
; CHECK-NEXT: [[BC_RESUME_VAL5:%.*]] = phi i64 [ [[TMP0]], [[MIDDLE_BLOCK]] ], [ [[START]], [[ENTRY]] ]
1262+
; CHECK-NEXT: br label [[LOOP:%.*]]
1263+
; CHECK: loop:
1264+
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
1265+
; CHECK-NEXT: [[INDEX2:%.*]] = phi i64 [ [[INDEX2_NEXT:%.*]], [[LOOP_INC]] ], [ [[BC_RESUME_VAL5]], [[SCALAR_PH]] ]
1266+
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
1267+
; CHECK-NEXT: [[INDEX2_NEXT]] = add i64 [[INDEX2]], 1
1268+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
1269+
; CHECK-NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
1270+
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
1271+
; CHECK-NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
1272+
; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
1273+
; CHECK-NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_EARLY_EXIT]]
1274+
; CHECK: loop.inc:
1275+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
1276+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP31:![0-9]+]]
1277+
; CHECK: loop.early.exit:
1278+
; CHECK-NEXT: [[RETVAL1:%.*]] = phi i64 [ [[INDEX2_NEXT]], [[LOOP]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
1279+
; CHECK-NEXT: ret i64 [[RETVAL1]]
1280+
; CHECK: loop.end:
1281+
; CHECK-NEXT: [[RETVAL2:%.*]] = phi i64 [ [[INDEX2]], [[LOOP_INC]] ], [ [[IND_ESCAPE]], [[MIDDLE_BLOCK]] ]
1282+
; CHECK-NEXT: ret i64 [[RETVAL2]]
1283+
;
1284+
entry:
1285+
%p1 = alloca [1024 x i8]
1286+
%p2 = alloca [1024 x i8]
1287+
call void @init_mem(ptr %p1, i64 1024)
1288+
call void @init_mem(ptr %p2, i64 1024)
1289+
br label %loop
1290+
1291+
loop:
1292+
%index = phi i64 [ %index.next, %loop.inc ], [ 3, %entry ]
1293+
%index2 = phi i64 [ %index2.next, %loop.inc ], [ %start, %entry ]
1294+
%index.next = add i64 %index, 1
1295+
%index2.next = add i64 %index2, 1
1296+
%arrayidx = getelementptr inbounds i8, ptr %p1, i64 %index
1297+
%ld1 = load i8, ptr %arrayidx, align 1
1298+
%arrayidx1 = getelementptr inbounds i8, ptr %p2, i64 %index
1299+
%ld2 = load i8, ptr %arrayidx1, align 1
1300+
%cmp3 = icmp eq i8 %ld1, %ld2
1301+
br i1 %cmp3, label %loop.inc, label %loop.early.exit
1302+
1303+
loop.inc:
1304+
%exitcond = icmp ne i64 %index.next, 67
1305+
br i1 %exitcond, label %loop, label %loop.end
1306+
1307+
loop.early.exit:
1308+
%retval1 = phi i64 [ %index2.next, %loop ]
1309+
ret i64 %retval1
1310+
1311+
loop.end:
1312+
%retval2 = phi i64 [ %index2, %loop.inc ]
1313+
ret i64 %retval2
1314+
}
1315+
12081316

12091317
define i64 @loop_contains_safe_call() {
12101318
; CHECK-LABEL: define i64 @loop_contains_safe_call() {
@@ -1232,7 +1340,7 @@ define i64 @loop_contains_safe_call() {
12321340
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
12331341
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
12341342
; CHECK-NEXT: [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
1235-
; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP30:![0-9]+]]
1343+
; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP32:![0-9]+]]
12361344
; CHECK: middle.split:
12371345
; CHECK-NEXT: br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
12381346
; CHECK: middle.block:
@@ -1254,7 +1362,7 @@ define i64 @loop_contains_safe_call() {
12541362
; CHECK: loop.inc:
12551363
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
12561364
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
1257-
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP31:![0-9]+]]
1365+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP33:![0-9]+]]
12581366
; CHECK: loop.end:
12591367
; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
12601368
; CHECK-NEXT: ret i64 [[RETVAL]]
@@ -1311,7 +1419,7 @@ define i64 @loop_contains_safe_div() {
13111419
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT2]], 64
13121420
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
13131421
; CHECK-NEXT: [[TMP8:%.*]] = or i1 [[TMP6]], [[TMP7]]
1314-
; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP32:![0-9]+]]
1422+
; CHECK-NEXT: br i1 [[TMP8]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP34:![0-9]+]]
13151423
; CHECK: middle.split:
13161424
; CHECK-NEXT: br i1 [[TMP6]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
13171425
; CHECK: middle.block:
@@ -1333,7 +1441,7 @@ define i64 @loop_contains_safe_div() {
13331441
; CHECK: loop.inc:
13341442
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
13351443
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
1336-
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP33:![0-9]+]]
1444+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP35:![0-9]+]]
13371445
; CHECK: loop.end:
13381446
; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
13391447
; CHECK-NEXT: ret i64 [[RETVAL]]
@@ -1391,7 +1499,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
13911499
; CHECK-NEXT: [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
13921500
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
13931501
; CHECK-NEXT: [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
1394-
; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP34:![0-9]+]]
1502+
; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP36:![0-9]+]]
13951503
; CHECK: middle.split:
13961504
; CHECK-NEXT: [[TMP10:%.*]] = extractelement <4 x i64> [[WIDE_LOAD2]], i32 3
13971505
; CHECK-NEXT: br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
@@ -1415,7 +1523,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
14151523
; CHECK-NEXT: [[LD2:%.*]] = load i64, ptr [[ARRAYIDX2]], align 8
14161524
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
14171525
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
1418-
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP35:![0-9]+]]
1526+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP37:![0-9]+]]
14191527
; CHECK: loop.end:
14201528
; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ [[LD2]], [[LOOP_INC]] ], [ [[TMP10]], [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
14211529
; CHECK-NEXT: ret i64 [[RETVAL]]
@@ -1477,7 +1585,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
14771585
; CHECK-NEXT: [[TMP10:%.*]] = icmp eq i64 [[INDEX_NEXT4]], 1020
14781586
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 -4)
14791587
; CHECK-NEXT: [[TMP11:%.*]] = or i1 [[TMP9]], [[TMP10]]
1480-
; CHECK-NEXT: br i1 [[TMP11]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP36:![0-9]+]]
1588+
; CHECK-NEXT: br i1 [[TMP11]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP38:![0-9]+]]
14811589
; CHECK: middle.split:
14821590
; CHECK-NEXT: br i1 [[TMP9]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
14831591
; CHECK: middle.block:
@@ -1500,7 +1608,7 @@ define i64 @same_exit_block_pre_inc_use1_reverse() {
15001608
; CHECK: loop.inc:
15011609
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], -1
15021610
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[INDEX_NEXT]], 0
1503-
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP_END]], label [[LOOP]], !llvm.loop [[LOOP37:![0-9]+]]
1611+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP_END]], label [[LOOP]], !llvm.loop [[LOOP39:![0-9]+]]
15041612
; CHECK: loop.end:
15051613
; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 1024, [[LOOP_INC]] ], [ 1024, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
15061614
; CHECK-NEXT: ret i64 [[RETVAL]]
@@ -1557,7 +1665,7 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
15571665
; CHECK-NEXT: [[TMP8:%.*]] = icmp eq i64 [[INDEX_NEXT3]], 64
15581666
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
15591667
; CHECK-NEXT: [[TMP9:%.*]] = or i1 [[TMP7]], [[TMP8]]
1560-
; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP38:![0-9]+]]
1668+
; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP40:![0-9]+]]
15611669
; CHECK: middle.split:
15621670
; CHECK-NEXT: br i1 [[TMP7]], label [[VECTOR_EARLY_EXIT:%.*]], label [[MIDDLE_BLOCK:%.*]]
15631671
; CHECK: middle.block:
@@ -1580,7 +1688,7 @@ define i64 @same_exit_block_pre_inc_use1_deref_ptrs(ptr dereferenceable(1024) %p
15801688
; CHECK: loop.inc:
15811689
; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
15821690
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
1583-
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP39:![0-9]+]]
1691+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]], !llvm.loop [[LOOP41:![0-9]+]]
15841692
; CHECK: loop.end:
15851693
; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ], [ 67, [[MIDDLE_BLOCK]] ], [ [[EARLY_EXIT_VALUE]], [[VECTOR_EARLY_EXIT]] ]
15861694
; CHECK-NEXT: ret i64 [[RETVAL]]
@@ -1653,4 +1761,6 @@ attributes #0 = { "vector-function-abi-variant"="_ZGVsNxv_foo(foo_vec)" }
16531761
; CHECK: [[LOOP37]] = distinct !{[[LOOP37]], [[META2]], [[META1]]}
16541762
; CHECK: [[LOOP38]] = distinct !{[[LOOP38]], [[META1]], [[META2]]}
16551763
; CHECK: [[LOOP39]] = distinct !{[[LOOP39]], [[META2]], [[META1]]}
1764+
; CHECK: [[LOOP40]] = distinct !{[[LOOP40]], [[META1]], [[META2]]}
1765+
; CHECK: [[LOOP41]] = distinct !{[[LOOP41]], [[META2]], [[META1]]}
16561766
;.

0 commit comments

Comments
 (0)