[VPlan] Use VFxUF in VPWidenPointerInductionRecipe.
Use VFxUF VPValue instead of computing VF * UF explicitly.
This commit is contained in:
@@ -3364,9 +3364,8 @@ void VPWidenPointerInductionRecipe::execute(VPTransformState &State) {
|
||||
if (CurrentPart == 0) {
|
||||
// The recipe represents the first part of the pointer induction. Create the
|
||||
// GEP to increment the phi across all unrolled parts.
|
||||
unsigned UF = getParent()->getPlan()->getUF();
|
||||
Value *NumUnrolledElems =
|
||||
State.Builder.CreateMul(RuntimeVF, ConstantInt::get(PhiType, UF));
|
||||
State.get(&getParent()->getPlan()->getVFxUF(), true);
|
||||
|
||||
Value *InductionGEP = GetElementPtrInst::Create(
|
||||
State.Builder.getInt8Ty(), NewPointerPhi,
|
||||
|
||||
@@ -69,8 +69,7 @@ define void @pointer_induction_used_as_vector(ptr noalias %start.1, ptr noalias
|
||||
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[TMP7:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; CHECK-NEXT: [[TMP8:%.*]] = mul i64 [[TMP7]], 2
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 1
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = mul i64 1, [[TMP9]]
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = mul i64 1, [[TMP6]]
|
||||
; CHECK-NEXT: [[TMP11:%.*]] = mul i64 [[TMP8]], 0
|
||||
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[TMP11]], i64 0
|
||||
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
|
||||
@@ -162,8 +161,7 @@ define void @pointer_induction(ptr noalias %start, i64 %N) {
|
||||
; CHECK-NEXT: [[INDEX2:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[TMP7:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; CHECK-NEXT: [[TMP8:%.*]] = mul i64 [[TMP7]], 2
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 1
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = mul i64 1, [[TMP9]]
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = mul i64 1, [[TMP6]]
|
||||
; CHECK-NEXT: [[TMP11:%.*]] = mul i64 [[TMP8]], 0
|
||||
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[TMP11]], i64 0
|
||||
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
|
||||
|
||||
@@ -240,8 +240,7 @@ define i32 @pointer_iv_mixed(ptr noalias %a, ptr noalias %b, i64 %n) #0 {
|
||||
; CHECK-NEXT: [[POINTER_PHI:%.*]] = phi ptr [ [[A]], [[VECTOR_PH]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[VEC_PHI:%.*]] = phi <vscale x 2 x i32> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP12:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[TMP7:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; CHECK-NEXT: [[TMP8:%.*]] = shl nuw nsw i64 [[TMP7]], 3
|
||||
; CHECK-NEXT: [[TMP8:%.*]] = shl nuw nsw i64 [[TMP5]], 3
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = shl <vscale x 2 x i64> [[TMP9]], splat (i64 2)
|
||||
; CHECK-NEXT: [[VECTOR_GEP:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <vscale x 2 x i64> [[TMP10]]
|
||||
@@ -315,8 +314,7 @@ define void @phi_used_in_vector_compare_and_scalar_indvar_update_and_store(ptr %
|
||||
; CHECK: vector.body:
|
||||
; CHECK-NEXT: [[POINTER_PHI:%.*]] = phi ptr [ [[PTR:%.*]], [[VECTOR_PH]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; CHECK-NEXT: [[TMP3:%.*]] = shl nuw nsw i64 [[TMP2]], 2
|
||||
; CHECK-NEXT: [[TMP3:%.*]] = shl nuw nsw i64 [[TMP0]], 2
|
||||
; CHECK-NEXT: [[TMP4:%.*]] = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()
|
||||
; CHECK-NEXT: [[TMP5:%.*]] = shl <vscale x 2 x i64> [[TMP4]], splat (i64 1)
|
||||
; CHECK-NEXT: [[VECTOR_GEP:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <vscale x 2 x i64> [[TMP5]]
|
||||
|
||||
@@ -172,8 +172,7 @@ define void @single_constant_stride_ptr_iv(ptr %p) {
|
||||
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; CHECK-NEXT: [[TMP9:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; CHECK-NEXT: [[TMP10:%.*]] = mul i64 [[TMP9]], 4
|
||||
; CHECK-NEXT: [[TMP11:%.*]] = mul i64 [[TMP10]], 1
|
||||
; CHECK-NEXT: [[TMP12:%.*]] = mul i64 8, [[TMP11]]
|
||||
; CHECK-NEXT: [[TMP12:%.*]] = mul i64 8, [[TMP8]]
|
||||
; CHECK-NEXT: [[TMP13:%.*]] = mul i64 [[TMP10]], 0
|
||||
; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP13]], i64 0
|
||||
; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[DOTSPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
|
||||
@@ -771,8 +770,7 @@ define void @double_stride_ptr_iv(ptr %p, ptr %p2, i64 %stride) {
|
||||
; STRIDED-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
|
||||
; STRIDED-NEXT: [[TMP14:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; STRIDED-NEXT: [[TMP15:%.*]] = mul i64 [[TMP14]], 4
|
||||
; STRIDED-NEXT: [[TMP16:%.*]] = mul i64 [[TMP15]], 1
|
||||
; STRIDED-NEXT: [[TMP17:%.*]] = mul i64 [[STRIDE]], [[TMP16]]
|
||||
; STRIDED-NEXT: [[TMP17:%.*]] = mul i64 [[STRIDE]], [[TMP13]]
|
||||
; STRIDED-NEXT: [[TMP18:%.*]] = mul i64 [[TMP15]], 0
|
||||
; STRIDED-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP18]], i64 0
|
||||
; STRIDED-NEXT: [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[DOTSPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
|
||||
@@ -784,8 +782,7 @@ define void @double_stride_ptr_iv(ptr %p, ptr %p2, i64 %stride) {
|
||||
; STRIDED-NEXT: [[VECTOR_GEP:%.*]] = getelementptr i8, ptr [[POINTER_PHI]], <vscale x 4 x i64> [[TMP21]]
|
||||
; STRIDED-NEXT: [[TMP22:%.*]] = call i64 @llvm.vscale.i64()
|
||||
; STRIDED-NEXT: [[TMP23:%.*]] = mul i64 [[TMP22]], 4
|
||||
; STRIDED-NEXT: [[TMP24:%.*]] = mul i64 [[TMP23]], 1
|
||||
; STRIDED-NEXT: [[TMP25:%.*]] = mul i64 [[STRIDE]], [[TMP24]]
|
||||
; STRIDED-NEXT: [[TMP25:%.*]] = mul i64 [[STRIDE]], [[TMP13]]
|
||||
; STRIDED-NEXT: [[TMP26:%.*]] = mul i64 [[TMP23]], 0
|
||||
; STRIDED-NEXT: [[DOTSPLATINSERT13:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP26]], i64 0
|
||||
; STRIDED-NEXT: [[DOTSPLAT14:%.*]] = shufflevector <vscale x 4 x i64> [[DOTSPLATINSERT13]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
|
||||
|
||||
Reference in New Issue
Block a user