[llvm] [VPlan] Use VPWidenIntrinsicRecipe to vp.select. (PR #110489)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 14 05:39:03 PDT 2024


================
@@ -1383,6 +1385,15 @@ static void transformRecipestoEVLRecipes(VPlan &Plan, VPValue &EVL) {
                 VPValue *NewMask = GetNewMask(Red->getCondOp());
                 return new VPReductionEVLRecipe(*Red, EVL, NewMask);
               })
+              .Case<VPWidenSelectRecipe>([&](VPWidenSelectRecipe *Sel) {
+                SmallVector<VPValue *> Ops(Sel->operands());
+                Ops.push_back(&EVL);
+                return new VPWidenIntrinsicRecipe(
----------------
fhahn wrote:

Looking at https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp#L1132, `vp_select` should match `SelectInst`'s cost.

There may be an edge-case where the condition is considered scalar (https://github.com/llvm/llvm-project/blob/main/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp#L6631), but this shouldn't apply to `vp_select` and the VPlan cost would be more accurate. We may have to consider if EVL will be applied in the legacy cost computation if that indeed becomes an issue.

https://github.com/llvm/llvm-project/pull/110489


More information about the llvm-commits mailing list