[llvm] [VPlan] Add ReductionStartVector VPInstruction. (PR #142290)

Mel Chen via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 4 06:21:16 PDT 2025


================
@@ -223,6 +223,23 @@ void UnrollState::unrollHeaderPHIByUF(VPHeaderPHIRecipe *R,
       Copy->addOperand(R);
       Copy->addOperand(getConstantVPV(Part));
     } else if (RdxPhi) {
+      // If the start value is a ReductionStartVector, use the identity value
+      // (second operand) for unrolled parts. If the scaling factor is > 1,
+      // create a new ReductionStartVector with the scale factor and both
+      // operands set to the identity value.
+      if (auto *VPI = dyn_cast<VPInstruction>(RdxPhi->getStartValue())) {
+        if (cast<ConstantInt>(VPI->getOperand(2)->getLiveInIRValue())
+                ->getZExtValue() == 1)
+          Copy->setOperand(0, VPI->getOperand(1));
+        else {
+          if (Part == 1) {
+            auto *C = VPI->clone();
+            C->setOperand(0, C->getOperand(1));
+            C->insertAfter(VPI);
+            addUniformForAllParts(C);
+          }
+        }
+      }
----------------
Mel-Chen wrote:

Some format suggestions.
```suggestion
      if (auto *VPI = dyn_cast<VPInstruction>(RdxPhi->getStartValue()))
        if (cast<ConstantInt>(VPI->getOperand(2)->getLiveInIRValue())
                ->getZExtValue() == 1) {
          Copy->setOperand(0, VPI->getOperand(1));
        } else if (Part == 1) {
          auto *C = VPI->clone();
          C->setOperand(0, C->getOperand(1));
          C->insertAfter(VPI);
          addUniformForAllParts(C);
        }
```

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


More information about the llvm-commits mailing list