[llvm] [VPlan] Add vputils::reconstructSSA (PR #212209)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 9 13:59:30 PDT 2026
================
@@ -1366,3 +1366,40 @@ void vputils::detail::pullOutPermutationsImpl(
}
}
}
+
+// Implements the algorithm described in "Simple and Efficient Construction of
+// Static Single Assignment Form" by Braun et al.
+VPValue *vputils::reconstructSSA(VPBasicBlock *VPBB,
+ DenseMap<VPBasicBlock *, VPValue *> &Defs) {
+ assert(!Defs.empty() && "Defs shouldn't be empty");
+ assert(VPBB->getPlan() && "VPBB isn't reachable from entry");
+ if (VPValue *Def = Defs.lookup(VPBB))
+ return Def;
+ // If the entry block is reached and there's still no def, then Defs is
+ // missing a definition that covers this path.
+ assert(VPBB->getNumPredecessors() && "Not all paths have def");
+
+ if (VPBlockBase *Pred = VPBB->getSinglePredecessor())
+ return reconstructSSA(cast<VPBasicBlock>(Pred), Defs);
+
+ // Multiple predecessors, create a join.
+ Type *Ty = Defs.begin()->second->getScalarType();
+ auto *Phi = new VPPhi({}, VPIRFlags::getDefaultFlags(Instruction::PHI, Ty),
+ DebugLoc::getUnknown(), "", Ty);
+ VPBB->insert(Phi, VPBB->getFirstNonPhi());
----------------
fhahn wrote:
Could this use `VPBuilder.createScalarPhi`?
https://github.com/llvm/llvm-project/pull/212209
More information about the llvm-commits
mailing list