Skip to content

Commit 5ea6a3f

Browse files
authored
[VPlan] Compute scalable VF in preheader for induction increment. (#74762)
UF * VF is loop invariant and can be computed directly in the preheader. This prepares the code for #74761 and reduces the test changes.
1 parent 69a0a3b commit 5ea6a3f

File tree

60 files changed

+1138
-1122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1138
-1122
lines changed

llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,14 @@ Value *VPInstruction::generateInstruction(VPTransformState &State,
340340
auto *Phi = State.get(getOperand(0), 0);
341341
// The loop step is equal to the vectorization factor (num of SIMD
342342
// elements) times the unroll factor (num of SIMD instructions).
343-
Value *Step =
344-
createStepForVF(Builder, Phi->getType(), State.VF, State.UF);
343+
Value *Step;
344+
{
345+
BasicBlock *VectorPH = State.CFG.getPreheaderBBFor(this);
346+
IRBuilder<> PHBuilder(VectorPH->getTerminator());
347+
// Step is loop-invariant, calls to vscale will be placed in the
348+
// preheader.
349+
Step = createStepForVF(PHBuilder, Phi->getType(), State.VF, State.UF);
350+
}
345351
return Builder.CreateAdd(Phi, Step, Name, hasNoUnsignedWrap(),
346352
hasNoSignedWrap());
347353
}

llvm/test/Transforms/LoopVectorize/AArch64/eliminate-tail-predication.ll

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ define void @f1(ptr %A) #0 {
1818
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4
1919
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 1024, [[TMP3]]
2020
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 1024, [[N_MOD_VF]]
21+
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.vscale.i64()
22+
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], 4
2123
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
2224
; CHECK: vector.body:
2325
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
24-
; CHECK-NEXT: [[TMP4:%.*]] = add i64 [[INDEX]], 0
25-
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[TMP4]]
26-
; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[TMP5]], i32 0
27-
; CHECK-NEXT: store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[TMP6]], align 4
28-
; CHECK-NEXT: [[TMP7:%.*]] = call i64 @llvm.vscale.i64()
29-
; CHECK-NEXT: [[TMP8:%.*]] = mul i64 [[TMP7]], 4
30-
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP8]]
26+
; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[INDEX]], 0
27+
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[TMP6]]
28+
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[TMP7]], i32 0
29+
; CHECK-NEXT: store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[TMP8]], align 4
30+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP5]]
3131
; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
3232
; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
3333
; CHECK: middle.block:

llvm/test/Transforms/LoopVectorize/AArch64/gather-do-not-vectorize-addressing.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ define dso_local double @test(ptr nocapture noundef readonly %data, ptr nocaptur
5454
; SVE-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
5555
; SVE-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[WIDE_TRIP_COUNT]], [[TMP3]]
5656
; SVE-NEXT: [[N_VEC:%.*]] = sub i64 [[WIDE_TRIP_COUNT]], [[N_MOD_VF]]
57+
; SVE-NEXT: [[TMP10:%.*]] = call i64 @llvm.vscale.i64()
58+
; SVE-NEXT: [[TMP11:%.*]] = mul i64 [[TMP10]], 2
5759
; SVE-NEXT: br label [[VECTOR_BODY:%.*]]
5860
; SVE: vector.body:
5961
; SVE-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
@@ -66,8 +68,6 @@ define dso_local double @test(ptr nocapture noundef readonly %data, ptr nocaptur
6668
; SVE-NEXT: [[TMP8:%.*]] = getelementptr inbounds double, ptr [[DATA:%.*]], <vscale x 2 x i64> [[TMP7]]
6769
; SVE-NEXT: [[WIDE_MASKED_GATHER:%.*]] = call <vscale x 2 x double> @llvm.masked.gather.nxv2f64.nxv2p0(<vscale x 2 x ptr> [[TMP8]], i32 8, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer), <vscale x 2 x double> poison)
6870
; SVE-NEXT: [[TMP9]] = fadd <vscale x 2 x double> [[VEC_PHI]], [[WIDE_MASKED_GATHER]]
69-
; SVE-NEXT: [[TMP10:%.*]] = call i64 @llvm.vscale.i64()
70-
; SVE-NEXT: [[TMP11:%.*]] = mul i64 [[TMP10]], 2
7171
; SVE-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP11]]
7272
; SVE-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
7373
; SVE-NEXT: br i1 [[TMP12]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]

llvm/test/Transforms/LoopVectorize/AArch64/masked-call.ll

Lines changed: 28 additions & 28 deletions
Large diffs are not rendered by default.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ define void @foo() {
2727
; CHECK-NEXT: [[TMP9:%.*]] = mul i64 1, [[TMP8]]
2828
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP9]], i64 0
2929
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[DOTSPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
30+
; CHECK-NEXT: [[TMP18:%.*]] = call i64 @llvm.vscale.i64()
31+
; CHECK-NEXT: [[TMP19:%.*]] = mul i64 [[TMP18]], 4
3032
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
3133
; CHECK: vector.body:
3234
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[OUTER_LOOP_LATCH4:%.*]] ]
@@ -49,8 +51,6 @@ define void @foo() {
4951
; CHECK-NEXT: call void @llvm.masked.scatter.nxv4f32.nxv4p0(<vscale x 4 x float> [[VEC_PHI5]], <vscale x 4 x ptr> [[TMP10]], i32 4, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
5052
; CHECK-NEXT: [[TMP16:%.*]] = add nuw nsw <vscale x 4 x i64> [[VEC_IND]], shufflevector (<vscale x 4 x i64> insertelement (<vscale x 4 x i64> poison, i64 1, i64 0), <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer)
5153
; CHECK-NEXT: [[TMP17:%.*]] = icmp eq <vscale x 4 x i64> [[TMP16]], shufflevector (<vscale x 4 x i64> insertelement (<vscale x 4 x i64> poison, i64 1024, i64 0), <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer)
52-
; CHECK-NEXT: [[TMP18:%.*]] = call i64 @llvm.vscale.i64()
53-
; CHECK-NEXT: [[TMP19:%.*]] = mul i64 [[TMP18]], 4
5454
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP19]]
5555
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <vscale x 4 x i64> [[VEC_IND]], [[DOTSPLAT]]
5656
; CHECK-NEXT: [[TMP20:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]

llvm/test/Transforms/LoopVectorize/AArch64/pr60831-sve-inv-store-crash.ll

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,28 @@ define void @test_invar_gep(ptr %dst) #0 {
1717
; CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 4
1818
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 100, [[TMP3]]
1919
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 100, [[N_MOD_VF]]
20+
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.vscale.i64()
21+
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], 4
2022
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
2123
; CHECK: vector.body:
2224
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
23-
; CHECK-NEXT: [[TMP4:%.*]] = call <vscale x 4 x i64> @llvm.experimental.stepvector.nxv4i64()
25+
; CHECK-NEXT: [[TMP6:%.*]] = call <vscale x 4 x i64> @llvm.experimental.stepvector.nxv4i64()
2426
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[INDEX]], i64 0
2527
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[DOTSPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
26-
; CHECK-NEXT: [[TMP5:%.*]] = add <vscale x 4 x i64> zeroinitializer, [[TMP4]]
27-
; CHECK-NEXT: [[TMP6:%.*]] = mul <vscale x 4 x i64> [[TMP5]], shufflevector (<vscale x 4 x i64> insertelement (<vscale x 4 x i64> poison, i64 1, i64 0), <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer)
28-
; CHECK-NEXT: [[TMP7:%.*]] = add <vscale x 4 x i64> [[DOTSPLAT]], [[TMP6]]
29-
; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[INDEX]], 0
30-
; CHECK-NEXT: [[TMP9:%.*]] = add i64 [[INDEX]], 1
31-
; CHECK-NEXT: [[TMP10:%.*]] = add i64 [[INDEX]], 2
32-
; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[INDEX]], 3
33-
; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 0
34-
; CHECK-NEXT: [[TMP13:%.*]] = call i32 @llvm.vscale.i32()
35-
; CHECK-NEXT: [[TMP14:%.*]] = mul i32 [[TMP13]], 4
36-
; CHECK-NEXT: [[TMP15:%.*]] = sub i32 [[TMP14]], 1
37-
; CHECK-NEXT: [[TMP16:%.*]] = extractelement <vscale x 4 x i64> [[TMP7]], i32 [[TMP15]]
38-
; CHECK-NEXT: store i64 [[TMP16]], ptr [[TMP12]], align 1
39-
; CHECK-NEXT: [[TMP17:%.*]] = call i64 @llvm.vscale.i64()
40-
; CHECK-NEXT: [[TMP18:%.*]] = mul i64 [[TMP17]], 4
41-
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP18]]
28+
; CHECK-NEXT: [[TMP7:%.*]] = add <vscale x 4 x i64> zeroinitializer, [[TMP6]]
29+
; CHECK-NEXT: [[TMP8:%.*]] = mul <vscale x 4 x i64> [[TMP7]], shufflevector (<vscale x 4 x i64> insertelement (<vscale x 4 x i64> poison, i64 1, i64 0), <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer)
30+
; CHECK-NEXT: [[TMP9:%.*]] = add <vscale x 4 x i64> [[DOTSPLAT]], [[TMP8]]
31+
; CHECK-NEXT: [[TMP10:%.*]] = add i64 [[INDEX]], 0
32+
; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[INDEX]], 1
33+
; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[INDEX]], 2
34+
; CHECK-NEXT: [[TMP13:%.*]] = add i64 [[INDEX]], 3
35+
; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 0
36+
; CHECK-NEXT: [[TMP15:%.*]] = call i32 @llvm.vscale.i32()
37+
; CHECK-NEXT: [[TMP16:%.*]] = mul i32 [[TMP15]], 4
38+
; CHECK-NEXT: [[TMP17:%.*]] = sub i32 [[TMP16]], 1
39+
; CHECK-NEXT: [[TMP18:%.*]] = extractelement <vscale x 4 x i64> [[TMP9]], i32 [[TMP17]]
40+
; CHECK-NEXT: store i64 [[TMP18]], ptr [[TMP14]], align 1
41+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP5]]
4242
; CHECK-NEXT: [[TMP19:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
4343
; CHECK-NEXT: br i1 [[TMP19]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
4444
; CHECK: middle.block:

llvm/test/Transforms/LoopVectorize/AArch64/scalable-avoid-scalarization.ll

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,39 @@ define void @test_no_scalarization(ptr %a, ptr noalias %b, i32 %idx, i32 %n) #0
2626
; CHECK-NEXT: [[IND_END:%.*]] = add i32 [[IDX]], [[N_VEC]]
2727
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i32> poison, i32 [[IDX]], i64 0
2828
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i32> [[DOTSPLATINSERT]], <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
29-
; CHECK-NEXT: [[TMP6:%.*]] = call <vscale x 2 x i32> @llvm.experimental.stepvector.nxv2i32()
30-
; CHECK-NEXT: [[TMP7:%.*]] = add <vscale x 2 x i32> [[TMP6]], zeroinitializer
31-
; CHECK-NEXT: [[TMP8:%.*]] = mul <vscale x 2 x i32> [[TMP7]], shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 1, i64 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)
32-
; CHECK-NEXT: [[INDUCTION:%.*]] = add <vscale x 2 x i32> [[DOTSPLAT]], [[TMP8]]
33-
; CHECK-NEXT: [[TMP9:%.*]] = call i32 @llvm.vscale.i32()
34-
; CHECK-NEXT: [[TMP10:%.*]] = mul i32 [[TMP9]], 2
35-
; CHECK-NEXT: [[TMP11:%.*]] = mul i32 1, [[TMP10]]
36-
; CHECK-NEXT: [[DOTSPLATINSERT1:%.*]] = insertelement <vscale x 2 x i32> poison, i32 [[TMP11]], i64 0
29+
; CHECK-NEXT: [[TMP8:%.*]] = call <vscale x 2 x i32> @llvm.experimental.stepvector.nxv2i32()
30+
; CHECK-NEXT: [[TMP9:%.*]] = add <vscale x 2 x i32> [[TMP8]], zeroinitializer
31+
; CHECK-NEXT: [[TMP10:%.*]] = mul <vscale x 2 x i32> [[TMP9]], shufflevector (<vscale x 2 x i32> insertelement (<vscale x 2 x i32> poison, i32 1, i64 0), <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer)
32+
; CHECK-NEXT: [[INDUCTION:%.*]] = add <vscale x 2 x i32> [[DOTSPLAT]], [[TMP10]]
33+
; CHECK-NEXT: [[TMP11:%.*]] = call i32 @llvm.vscale.i32()
34+
; CHECK-NEXT: [[TMP12:%.*]] = mul i32 [[TMP11]], 2
35+
; CHECK-NEXT: [[TMP13:%.*]] = mul i32 1, [[TMP12]]
36+
; CHECK-NEXT: [[DOTSPLATINSERT1:%.*]] = insertelement <vscale x 2 x i32> poison, i32 [[TMP13]], i64 0
3737
; CHECK-NEXT: [[DOTSPLAT2:%.*]] = shufflevector <vscale x 2 x i32> [[DOTSPLATINSERT1]], <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
38+
; CHECK-NEXT: [[TMP6:%.*]] = call i32 @llvm.vscale.i32()
39+
; CHECK-NEXT: [[TMP7:%.*]] = mul i32 [[TMP6]], 2
3840
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
3941
; CHECK: vector.body:
4042
; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
4143
; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 2 x i32> [ [[INDUCTION]], [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY]] ]
4244
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i32 [[IDX]], [[INDEX]]
43-
; CHECK-NEXT: [[TMP12:%.*]] = add i32 [[OFFSET_IDX]], 0
44-
; CHECK-NEXT: [[TMP13:%.*]] = getelementptr i64, ptr [[A:%.*]], <vscale x 2 x i32> [[VEC_IND]]
45-
; CHECK-NEXT: [[TMP14:%.*]] = extractelement <vscale x 2 x ptr> [[TMP13]], i32 0
46-
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr double, ptr [[TMP14]], i32 0
47-
; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <vscale x 2 x double>, ptr [[TMP15]], align 8
48-
; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i64, ptr [[B:%.*]], i32 [[TMP12]]
45+
; CHECK-NEXT: [[TMP14:%.*]] = add i32 [[OFFSET_IDX]], 0
46+
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i64, ptr [[A:%.*]], <vscale x 2 x i32> [[VEC_IND]]
47+
; CHECK-NEXT: [[TMP16:%.*]] = extractelement <vscale x 2 x ptr> [[TMP15]], i32 0
4948
; CHECK-NEXT: [[TMP17:%.*]] = getelementptr double, ptr [[TMP16]], i32 0
50-
; CHECK-NEXT: store <vscale x 2 x double> [[WIDE_LOAD]], ptr [[TMP17]], align 8
51-
; CHECK-NEXT: [[TMP18:%.*]] = call i32 @llvm.vscale.i32()
52-
; CHECK-NEXT: [[TMP19:%.*]] = mul i32 [[TMP18]], 2
53-
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], [[TMP19]]
49+
; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <vscale x 2 x double>, ptr [[TMP17]], align 8
50+
; CHECK-NEXT: [[TMP18:%.*]] = getelementptr i64, ptr [[B:%.*]], i32 [[TMP14]]
51+
; CHECK-NEXT: [[TMP19:%.*]] = getelementptr double, ptr [[TMP18]], i32 0
52+
; CHECK-NEXT: store <vscale x 2 x double> [[WIDE_LOAD]], ptr [[TMP19]], align 8
53+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], [[TMP7]]
5454
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <vscale x 2 x i32> [[VEC_IND]], [[DOTSPLAT2]]
5555
; CHECK-NEXT: [[TMP20:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]]
5656
; CHECK-NEXT: br i1 [[TMP20]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
5757
; CHECK: middle.block:
5858
; CHECK-NEXT: [[TMP21:%.*]] = call i32 @llvm.vscale.i32()
5959
; CHECK-NEXT: [[TMP22:%.*]] = mul i32 [[TMP21]], 2
6060
; CHECK-NEXT: [[TMP23:%.*]] = sub i32 [[TMP22]], 1
61-
; CHECK-NEXT: [[TMP24:%.*]] = extractelement <vscale x 2 x ptr> [[TMP13]], i32 [[TMP23]]
61+
; CHECK-NEXT: [[TMP24:%.*]] = extractelement <vscale x 2 x ptr> [[TMP15]], i32 [[TMP23]]
6262
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[TMP1]], [[N_VEC]]
6363
; CHECK-NEXT: br i1 [[CMP_N]], label [[L_EXIT:%.*]], label [[SCALAR_PH]]
6464
; CHECK: scalar.ph:

0 commit comments

Comments
 (0)