[llvm] [LV] Reuse VPReplicateRecipe to handle scalar stores in exit block. (PR #106342)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 26 03:23:12 PDT 2024
================
@@ -8948,12 +8957,22 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range) {
Operands = {OpRange.begin(), OpRange.end()};
}
- // Invariant stores inside loop will be deleted and a single store
- // with the final reduction value will be added to the exit block
+ // The stores with invariant address inside the loop will be deleted, and
+ // in the exit block, a uniform store recipe will be created for the final
+ // invariant store of the reduction.
StoreInst *SI;
if ((SI = dyn_cast<StoreInst>(&I)) &&
- Legal->isInvariantAddressOfReduction(SI->getPointerOperand()))
+ Legal->isInvariantAddressOfReduction(SI->getPointerOperand())) {
+ // Only create recipe for the final invariant store of the reduction.
+ if (!Legal->isInvariantStoreOfReduction(SI))
+ continue;
+ auto *Recipe = new VPReplicateRecipe(
+ SI, RecipeBuilder.mapToVPValues(Instr->operands()),
+ true /* IsUniform */);
+ RecipeBuilder.setRecipe(SI, Recipe);
----------------
fhahn wrote:
Is this needed?
https://github.com/llvm/llvm-project/pull/106342
More information about the llvm-commits
mailing list