[llvm] 2e29531 - [VPlan] Properly preserve IsMaterialized in VPlan::duplicate (NFC). (#190849)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 7 14:24:42 PDT 2026
Author: Florian Hahn
Date: 2026-04-07T21:24:37Z
New Revision: 2e29531ff4fee12ef883ad9af54208f9eada8f18
URL: https://github.com/llvm/llvm-project/commit/2e29531ff4fee12ef883ad9af54208f9eada8f18
DIFF: https://github.com/llvm/llvm-project/commit/2e29531ff4fee12ef883ad9af54208f9eada8f18.diff
LOG: [VPlan] Properly preserve IsMaterialized in VPlan::duplicate (NFC). (#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.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlan.cpp
Removed:
################################################################################
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