[llvm] [VPlan] Model FOR extract of exit value in VPlan. (PR #93395)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 1 04:26:49 PDT 2024


================
@@ -558,6 +560,27 @@ Value *VPInstruction::generatePerPart(VPTransformState &State, unsigned Part) {
 
     return ReducedPartRdx;
   }
+  case VPInstruction::ExtractRecurrenceResult: {
+    if (Part != 0)
+      return State.get(this, 0, /*IsScalar*/ true);
+
+    // Extract the second last element in the middle block for users outside the
+    // loop.
+    Value *Res;
+    if (State.VF.isVector()) {
+      Res = State.get(
+          getOperand(0),
+          VPIteration(State.UF - 1, VPLane::getLastLaneForVF(State.VF, 2)));
+    } else {
+      assert(State.UF > 1 && "VF and UF cannot both be 1");
+      // When loop is unrolled without vectorizing, retrieve the value just
+      // prior to the final unrolled value. This is analogous to the vectorized
+      // case above: extracting the second last element when VF > 1.
----------------
fhahn wrote:

This has now been generalized to ExtractFromEnd, so the comment is gone

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


More information about the llvm-commits mailing list