[llvm] [VPlan] Properly preserve IsMaterialized in VPlan::duplicate (NFC). (PR #190849)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 7 13:47:45 PDT 2026
https://github.com/fhahn created https://github.com/llvm/llvm-project/pull/190849
Make sure IsMaterialized is preserved in VPlan::duplicate for VPSymbolicValues. This is currently NFC.
Split off from approved
https://github.com/llvm/llvm-project/pull/156262.
>From a160f58bc4431216f308353e640da6c0309c3c3a Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo at fhahn.com>
Date: Tue, 7 Apr 2026 21:33:01 +0100
Subject: [PATCH] [VPlan] Properly preserve IsMaterialized in VPlan::duplicate
(NFC).
Make sure IsMaterialized is preserved in VPlan::duplicate for
VPSymbolicValues. This is currently NFC.
Split off from approved
https://github.com/llvm/llvm-project/pull/156262.
---
llvm/lib/Transforms/Vectorize/VPlan.cpp | 28 ++++++++++++++++++-------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp
index 994298c56bee0..3ba5ac582fa9a 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -1231,19 +1231,31 @@ VPlan *VPlan::duplicate() {
DenseMap<VPValue *, VPValue *> Old2NewVPValues;
for (VPIRValue *OldLiveIn : getLiveIns())
Old2NewVPValues[OldLiveIn] = NewPlan->getOrAddLiveIn(OldLiveIn);
- Old2NewVPValues[&VectorTripCount] = &NewPlan->VectorTripCount;
- Old2NewVPValues[&VF] = &NewPlan->VF;
- Old2NewVPValues[&UF] = &NewPlan->UF;
- Old2NewVPValues[&VFxUF] = &NewPlan->VFxUF;
- if (BackedgeTakenCount) {
- NewPlan->BackedgeTakenCount = new VPSymbolicValue();
- Old2NewVPValues[BackedgeTakenCount] = NewPlan->BackedgeTakenCount;
- }
+
if (auto *TripCountIRV = dyn_cast_or_null<VPIRValue>(TripCount))
Old2NewVPValues[TripCountIRV] = NewPlan->getOrAddLiveIn(TripCountIRV);
// else NewTripCount will be created and inserted into Old2NewVPValues when
// TripCount is cloned. In any case NewPlan->TripCount is updated below.
+ assert(none_of(Old2NewVPValues.keys(), IsaPred<VPSymbolicValue>) &&
+ "All VPSymbolicValues must be handled below");
+
+ if (BackedgeTakenCount)
+ NewPlan->BackedgeTakenCount = new VPSymbolicValue();
+
+ // Map and propagate materialized state for symbolic values.
+ for (auto [OldSV, NewSV] :
+ {std::pair{&VectorTripCount, &NewPlan->VectorTripCount},
+ {&VF, &NewPlan->VF},
+ {&UF, &NewPlan->UF},
+ {&VFxUF, &NewPlan->VFxUF},
+ {BackedgeTakenCount, NewPlan->BackedgeTakenCount}}) {
+ if (!OldSV)
+ continue;
+ Old2NewVPValues[OldSV] = NewSV;
+ if (OldSV->isMaterialized())
+ NewSV->markMaterialized();
+ }
remapOperands(Entry, NewEntry, Old2NewVPValues);
// Initialize remaining fields of cloned VPlan.
More information about the llvm-commits
mailing list