[llvm] [LV] Check if the VF is scalar by VFRange in `handleUncountableEarlyExit`. (PR #135294)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 15 00:24:39 PDT 2025


================
@@ -2436,13 +2438,20 @@ void VPlanTransforms::handleUncountableEarlyExit(
       ExitIRI->extractLastLaneOfOperand(MiddleBuilder);
     }
     // Add the incoming value from the early exit.
-    if (!IncomingFromEarlyExit->isLiveIn() && !Plan.hasScalarVFOnly()) {
-      VPValue *FirstActiveLane = EarlyExitB.createNaryOp(
-          VPInstruction::FirstActiveLane, {EarlyExitTakenCond}, nullptr,
-          "first.active.lane");
-      IncomingFromEarlyExit = EarlyExitB.createNaryOp(
-          Instruction::ExtractElement, {IncomingFromEarlyExit, FirstActiveLane},
-          nullptr, "early.exit.value");
+    if (!IncomingFromEarlyExit->isLiveIn()) {
+      // Limit range to scalar VF only, if the range contains the scalar VF.
+      bool IsVectorVF = LoopVectorizationPlanner::getDecisionAndClampRange(
+          [](ElementCount VF) { return VF.isVector(); }, Range);
+
+      if (IsVectorVF) {
----------------
sdesmalen-arm wrote:

```suggestion
      auto IsVector = [](ElementCount VF) { return VF.isVector(); };
      if (!IncomingFromEarlyExit->isLiveIn() &&
          // Limit range to scalar VF only, if the range contains the scalar VF.
          LoopVectorizationPlanner::getDecisionAndClampRange(IsVector, Range)) {
```

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


More information about the llvm-commits mailing list