Skip to content

Commit 0315ec1

Browse files
committed
Maintain previous behaviour by always generating vector for WidePtrAdd
1 parent 3b38332 commit 0315ec1

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,6 @@ bool VPInstruction::canGenerateScalarForFirstLane() const {
514514
case VPInstruction::CalculateTripCountMinusVF:
515515
case VPInstruction::CanonicalIVIncrementForPart:
516516
case VPInstruction::PtrAdd:
517-
case VPInstruction::WidePtrAdd:
518517
case VPInstruction::ExplicitVectorLength:
519518
case VPInstruction::AnyOf:
520519
return true;
@@ -858,7 +857,7 @@ Value *VPInstruction::generate(VPTransformState &State) {
858857
}
859858
case VPInstruction::WidePtrAdd: {
860859
Value *Ptr = State.get(getOperand(0), true);
861-
Value *Addend = State.get(getOperand(1), vputils::onlyFirstLaneUsed(this));
860+
Value *Addend = State.get(getOperand(1));
862861
return Builder.CreatePtrAdd(Ptr, Addend, Name, getGEPNoWrapFlags());
863862
}
864863
case VPInstruction::AnyOf: {
@@ -1090,8 +1089,9 @@ bool VPInstruction::onlyFirstLaneUsed(const VPValue *Op) const {
10901089
case VPInstruction::ReductionStartVector:
10911090
return true;
10921091
case VPInstruction::PtrAdd:
1093-
case VPInstruction::WidePtrAdd:
10941092
return Op == getOperand(0) || vputils::onlyFirstLaneUsed(this);
1093+
case VPInstruction::WidePtrAdd:
1094+
return Op == getOperand(0);
10951095
case VPInstruction::ComputeAnyOfResult:
10961096
case VPInstruction::ComputeFindIVResult:
10971097
return Op == getOperand(1);

llvm/test/Transforms/LoopVectorize/AArch64/sve-widen-gep.ll

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,10 @@ define void @pointer_induction(ptr noalias %start, i64 %N) {
162162
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[TMP11]], i64 0
163163
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
164164
; CHECK-NEXT: [[TMP12:%.*]] = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()
165-
; CHECK-NEXT: [[TMP20:%.*]] = extractelement <vscale x 2 x i64> [[DOTSPLAT]], i32 0
166-
; CHECK-NEXT: [[TMP21:%.*]] = extractelement <vscale x 2 x i64> [[TMP12]], i32 0
167-
; CHECK-NEXT: [[TMP13:%.*]] = add i64 [[TMP20]], [[TMP21]]
168-
; CHECK-NEXT: [[TMP14:%.*]] = mul i64 [[TMP13]], 1
169-
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], i64 [[TMP14]]
165+
; CHECK-NEXT: [[TMP13:%.*]] = add <vscale x 2 x i64> [[DOTSPLAT]], [[TMP12]]
166+
; CHECK-NEXT: [[TMP14:%.*]] = mul <vscale x 2 x i64> [[TMP13]], splat (i64 1)
167+
; CHECK-NEXT: [[VECTOR_GEP:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <vscale x 2 x i64> [[TMP14]]
168+
; CHECK-NEXT: [[TMP15:%.*]] = extractelement <vscale x 2 x ptr> [[VECTOR_GEP]], i32 0
170169
; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i8, ptr [[TMP15]], i32 0
171170
; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <vscale x 2 x i8>, ptr [[TMP16]], align 1
172171
; CHECK-NEXT: [[TMP17:%.*]] = add <vscale x 2 x i8> [[WIDE_LOAD]], splat (i8 1)

llvm/test/Transforms/LoopVectorize/X86/pr48340.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ define ptr @foo(ptr %p, ptr %p.last) unnamed_addr #0 {
2828
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
2929
; CHECK-NEXT: [[POINTER_PHI:%.*]] = phi ptr [ [[P]], [[VECTOR_PH]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
3030
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <4 x i64> <i64 12288, i64 13312, i64 14336, i64 15360>
31-
; CHECK-NEXT: [[VECTOR_GEP4:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], i64 0
31+
; CHECK-NEXT: [[VECTOR_GEP4:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <4 x i64> <i64 0, i64 1024, i64 2048, i64 3072>
3232
; CHECK-NEXT: [[WIDE_MASKED_GATHER6:%.*]] = call <4 x ptr> @llvm.masked.gather.v4p0.v4p0(<4 x ptr> [[TMP8]], i32 8, <4 x i1> splat (i1 true), <4 x ptr> poison)
3333
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
3434
; CHECK-NEXT: [[PTR_IND]] = getelementptr i8, ptr [[POINTER_PHI]], i64 16384
@@ -86,7 +86,7 @@ define ptr @bar(ptr %p, ptr %p.last) unnamed_addr #0 {
8686
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
8787
; CHECK-NEXT: [[POINTER_PHI:%.*]] = phi ptr [ [[P]], [[VECTOR_PH]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
8888
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <4 x i64> <i64 12288, i64 13312, i64 14336, i64 15360>
89-
; CHECK-NEXT: [[VECTOR_GEP4:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], i64 0
89+
; CHECK-NEXT: [[VECTOR_GEP4:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <4 x i64> <i64 0, i64 1024, i64 2048, i64 3072>
9090
; CHECK-NEXT: [[WIDE_MASKED_GATHER6:%.*]] = call <4 x ptr> @llvm.masked.gather.v4p0.v4p0(<4 x ptr> [[TMP8]], i32 8, <4 x i1> splat (i1 true), <4 x ptr> poison)
9191
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16
9292
; CHECK-NEXT: [[PTR_IND]] = getelementptr i8, ptr [[POINTER_PHI]], i64 16384

0 commit comments

Comments
 (0)