diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp index 54fdec3bcf4a1..e0ef3d5f41b6a 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp @@ -722,10 +722,9 @@ Value *VPInstruction::generate(VPTransformState &State) { return Builder.CreateCmp(CmpInst::Predicate::ICMP_ULT, VIVElem0, ScalarTC, Name); - auto *Int1Ty = Type::getInt1Ty(Builder.getContext()); - auto PredTy = VectorType::get( - Int1Ty, State.VF * cast(getOperand(2)->getLiveInIRValue()) - ->getZExtValue()); + ElementCount EC = State.VF.multiplyCoefficientBy( + cast(getOperand(2)->getLiveInIRValue())->getZExtValue()); + auto *PredTy = VectorType::get(Builder.getInt1Ty(), EC); return Builder.CreateIntrinsic(Intrinsic::get_active_lane_mask, {PredTy, ScalarTC->getType()}, {VIVElem0, ScalarTC}, nullptr, Name); @@ -755,7 +754,7 @@ Value *VPInstruction::generate(VPTransformState &State) { Value *Step = createStepForVF(Builder, ScalarTC->getType(), State.VF, UF); Value *Sub = Builder.CreateSub(ScalarTC, Step); Value *Cmp = Builder.CreateICmp(CmpInst::Predicate::ICMP_UGT, ScalarTC, Step); - Value *Zero = ConstantInt::get(ScalarTC->getType(), 0); + Value *Zero = ConstantInt::getNullValue(ScalarTC->getType()); return Builder.CreateSelect(Cmp, Sub, Zero); } case VPInstruction::ExplicitVectorLength: { @@ -767,11 +766,11 @@ Value *VPInstruction::generate(VPTransformState &State) { "Requested vector length should be an integer."); assert(State.VF.isScalable() && "Expected scalable vector factor."); - Value *VFArg = State.Builder.getInt32(State.VF.getKnownMinValue()); + Value *VFArg = Builder.getInt32(State.VF.getKnownMinValue()); - Value *EVL = State.Builder.CreateIntrinsic( - State.Builder.getInt32Ty(), Intrinsic::experimental_get_vector_length, - {AVL, VFArg, State.Builder.getTrue()}); + Value *EVL = Builder.CreateIntrinsic( + Builder.getInt32Ty(), Intrinsic::experimental_get_vector_length, + {AVL, VFArg, Builder.getTrue()}); return EVL; } case VPInstruction::CanonicalIVIncrementForPart: { @@ -825,8 +824,8 @@ Value *VPInstruction::generate(VPTransformState &State) { auto NumOfElements = ElementCount::getFixed(getNumOperands()); Value *Res = PoisonValue::get(toVectorizedTy(ScalarTy, NumOfElements)); for (const auto &[Idx, Op] : enumerate(operands())) - Res = State.Builder.CreateInsertElement(Res, State.get(Op, true), - State.Builder.getInt32(Idx)); + Res = Builder.CreateInsertElement(Res, State.get(Op, true), + Builder.getInt32(Idx)); return Res; } case VPInstruction::ReductionStartVector: { @@ -839,9 +838,8 @@ Value *VPInstruction::generate(VPTransformState &State) { ElementCount VF = State.VF.divideCoefficientBy( cast(getOperand(2)->getLiveInIRValue())->getZExtValue()); auto *Iden = Builder.CreateVectorSplat(VF, State.get(getOperand(1), true)); - Constant *Zero = Builder.getInt32(0); return Builder.CreateInsertElement(Iden, State.get(getOperand(0), true), - Zero); + Builder.getInt32(0)); } case VPInstruction::ComputeAnyOfResult: { // FIXME: The cross-recipe dependency on VPReductionPHIRecipe is temporary @@ -918,14 +916,12 @@ Value *VPInstruction::generate(VPTransformState &State) { if (RecurrenceDescriptor::isMinMaxRecurrenceKind(RK)) ReducedPartRdx = createMinMaxOp(Builder, RK, ReducedPartRdx, RdxPart); else { - Instruction::BinaryOps Opcode; // For sub-recurrences, each UF's reduction variable is already // negative, we need to do: reduce.add(-acc_uf0 + -acc_uf1) - if (RK == RecurKind::Sub) - Opcode = Instruction::Add; - else - Opcode = - (Instruction::BinaryOps)RecurrenceDescriptor::getOpcode(RK); + Instruction::BinaryOps Opcode = + RK == RecurKind::Sub + ? Instruction::Add + : (Instruction::BinaryOps)RecurrenceDescriptor::getOpcode(RK); ReducedPartRdx = Builder.CreateBinOp(Opcode, RdxPart, ReducedPartRdx, "bin.rdx"); } @@ -990,7 +986,7 @@ Value *VPInstruction::generate(VPTransformState &State) { Value *LaneToExtract = State.get(getOperand(0), true); Type *IdxTy = State.TypeAnalysis.inferScalarType(getOperand(0)); Value *Res = nullptr; - Value *RuntimeVF = getRuntimeVF(State.Builder, IdxTy, State.VF); + Value *RuntimeVF = getRuntimeVF(Builder, IdxTy, State.VF); for (unsigned Idx = 1; Idx != getNumOperands(); ++Idx) { Value *VectorStart = @@ -1020,8 +1016,7 @@ Value *VPInstruction::generate(VPTransformState &State) { // If there are multiple operands, create a chain of selects to pick the // first operand with an active lane and add the number of lanes of the // preceding operands. - Value *RuntimeVF = - getRuntimeVF(State.Builder, State.Builder.getInt64Ty(), State.VF); + Value *RuntimeVF = getRuntimeVF(Builder, Builder.getInt64Ty(), State.VF); unsigned LastOpIdx = getNumOperands() - 1; Value *Res = nullptr; for (int Idx = LastOpIdx; Idx >= 0; --Idx) {