[llvm] [VPlan] Make canonical IV part of the region (PR #156262)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 16 08:27:00 PDT 2026
================
@@ -4521,24 +4490,34 @@ class LLVM_ABI_FOR_TEST VPRegionBlock : public VPBlockBase {
/// its entry, and its exiting block to its successor.
void dissolveToCFGLoop();
- /// Returns the canonical induction recipe of the region.
- VPCanonicalIVPHIRecipe *getCanonicalIV() {
- VPBasicBlock *EntryVPBB = getEntryBasicBlock();
- if (EntryVPBB->empty()) {
- // VPlan native path. TODO: Unify both code paths.
- EntryVPBB = cast<VPBasicBlock>(EntryVPBB->getSingleSuccessor());
- }
- return cast<VPCanonicalIVPHIRecipe>(&*EntryVPBB->begin());
+ /// Get the canonical IV increment instruction. If the exiting terminator
+ /// is a BranchOnCount or BranchOnCond with an IV increment, return this
+ /// increment. Otherwise, create a new increment before the terminator and
+ /// return it.
+ VPInstruction *getOrCreateCanonicalIVIncrement();
+
+ /// Return the canonical induction variable of the region, null for
+ /// replicating regions.
+ VPRegionValue *getCanonicalIV() {
+ return CanIVInfo ? CanIVInfo->getVPValue() : nullptr;
}
- const VPCanonicalIVPHIRecipe *getCanonicalIV() const {
- return const_cast<VPRegionBlock *>(this)->getCanonicalIV();
+ const VPRegionValue *getCanonicalIV() const {
+ return CanIVInfo ? CanIVInfo->getVPValue() : nullptr;
}
/// Return the type of the canonical IV for loop regions.
- Type *getCanonicalIVType() { return getCanonicalIV()->getScalarType(); }
- const Type *getCanonicalIVType() const {
- return getCanonicalIV()->getScalarType();
+ Type *getCanonicalIVType() const {
+ return CanIVInfo->getVPValue()->getType();
+ }
+
+ /// Return the debug location of the canonical IV for loop regions.
+ DebugLoc getCanonicalIVDebugLoc() const {
+ return CanIVInfo->getVPValue()->getDebugLoc();
}
----------------
fhahn wrote:
there are quite a few uses of `getCanonicalIVType`, they could all be replaced, but in some cases we don't need the canonical IV, so this would increase the diff slightly
https://github.com/llvm/llvm-project/pull/156262
More information about the llvm-commits
mailing list