[VPlan] Use isUniformAfterVec in VPReplicateRecipe::execute.
authorFlorian Hahn <flo@fhahn.com>
Fri, 19 May 2023 17:15:20 +0000 (18:15 +0100)
committerFlorian Hahn <flo@fhahn.com>
Fri, 19 May 2023 17:15:21 +0000 (18:15 +0100)
I was unable to find a case where this actually changes generated code,
but it enables the bug fix in D144434. It also brings codegen in line
with the handling of stores to uniform addresses in the cost model
(D134460).

Reviewed By: Ayal

Differential Revision: https://reviews.llvm.org/D144491

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

index aaa6a3b..dab4d16 100644 (file)
@@ -9569,9 +9569,10 @@ void VPReplicateRecipe::execute(VPTransformState &State) {
     return;
   }
 
-  // A store of a loop varying value to a loop invariant address only
-  // needs only the last copy of the store.
-  if (isa<StoreInst>(UI) && getOperand(1)->isLiveIn()) {
+  // A store of a loop varying value to a uniform address only needs the last
+  // copy of the store.
+  if (isa<StoreInst>(UI) &&
+      vputils::isUniformAfterVectorization(getOperand(1))) {
     auto Lane = VPLane::getLastLaneForVF(State.VF);
     State.ILV->scalarizeInstruction(UI, this, VPIteration(State.UF - 1, Lane),
                                     State);