@@ -994,39 +994,33 @@ void VPWidenIntrinsicRecipe::execute(VPTransformState &State) {
994994 Args.push_back (Arg);
995995 }
996996
997- if (VPIntrinsic::isVPIntrinsic (VectorIntrinsicID)) {
998- // Use vector version of the vector predicate Intrinsic
999- IRBuilderBase &BuilderIR = State.Builder ;
1000- VectorBuilder VBuilder (BuilderIR);
1001- Value *Mask = BuilderIR.CreateVectorSplat (State.VF , BuilderIR.getTrue ());
1002- VBuilder.setMask (Mask).setEVL (Args.back ());
1003- // Remove the EVL from Args
997+ if (VPIntrinsic::isVPIntrinsic (VectorIntrinsicID) &&
998+ VectorIntrinsicID != Intrinsic::vp_select) {
999+ Value *Mask =
1000+ State.Builder .CreateVectorSplat (State.VF , State.Builder .getTrue ());
1001+ Value *EVL = Args.back ();
10041002 Args.pop_back ();
1005- Value *VPInst = VBuilder.createSimpleIntrinsic (
1006- VectorIntrinsicID, TysForDecl[0 ], Args, " vp.call" );
1007- if (!VPInst->getType ()->isVoidTy ())
1008- State.set (this , VPInst);
1009- State.addMetadata (VPInst,
1010- dyn_cast_or_null<Instruction>(getUnderlyingValue ()));
1011- } else {
1012- // Use vector version of the intrinsic.
1013- Module *M = State.Builder .GetInsertBlock ()->getModule ();
1014- Function *VectorF =
1015- Intrinsic::getOrInsertDeclaration (M, VectorIntrinsicID, TysForDecl);
1016- assert (VectorF && " Can't retrieve vector intrinsic." );
1003+ Args.push_back (Mask);
1004+ Args.push_back (EVL);
1005+ }
10171006
1018- auto *CI = cast_or_null<CallInst>(getUnderlyingValue ());
1019- SmallVector<OperandBundleDef, 1 > OpBundles;
1020- if (CI)
1021- CI->getOperandBundlesAsDefs (OpBundles);
1007+ // Use vector version of the intrinsic.
1008+ Module *M = State.Builder .GetInsertBlock ()->getModule ();
1009+ Function *VectorF =
1010+ Intrinsic::getOrInsertDeclaration (M, VectorIntrinsicID, TysForDecl);
1011+ assert (VectorF && " Can't retrieve vector intrinsic." );
10221012
1023- CallInst *V = State.Builder .CreateCall (VectorF, Args, OpBundles);
1024- setFlags (V);
1013+ auto *CI = cast_or_null<CallInst>(getUnderlyingValue ());
1014+ SmallVector<OperandBundleDef, 1 > OpBundles;
1015+ if (CI)
1016+ CI->getOperandBundlesAsDefs (OpBundles);
10251017
1026- if (!V->getType ()->isVoidTy ())
1027- State.set (this , V);
1028- State.addMetadata (V, CI);
1029- }
1018+ CallInst *V = State.Builder .CreateCall (VectorF, Args, OpBundles);
1019+ setFlags (V);
1020+
1021+ if (!V->getType ()->isVoidTy ())
1022+ State.set (this , V);
1023+ State.addMetadata (V, CI);
10301024}
10311025
10321026InstructionCost VPWidenIntrinsicRecipe::computeCost (ElementCount VF,
0 commit comments