[llvm] [VPlan] Invert condition if needed when creating inner regions. (PR #132292)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 25 14:03:15 PDT 2025
================
@@ -420,6 +420,17 @@ static void createLoopRegion(VPlan &Plan, VPBlockBase *HeaderVPB) {
auto *PreheaderVPBB = HeaderVPB->getPredecessors()[0];
auto *LatchVPBB = HeaderVPB->getPredecessors()[1];
+ // We are canonicalizing the successors of the latch when introducing the
+ // region. We will exit the region of the latch condition is true; invert the
+ // original condition if the original CFG branches to the header on true.
+ if (!LatchVPBB->getSingleSuccessor() &&
+ LatchVPBB->getSuccessors()[0] == HeaderVPB) {
+ auto *Term = cast<VPBasicBlock>(LatchVPBB)->getTerminator();
+ auto *Not = new VPInstruction(VPInstruction::Not, {Term->getOperand(0)});
+ Not->insertBefore(Term);
+ Term->setOperand(0, Not);
----------------
ayalz wrote:
Also swap the successors to keep successors and branch condition in sync, even though both successors are soon to be removed. As in canonicalizing the two predecessors of header.
https://github.com/llvm/llvm-project/pull/132292
More information about the llvm-commits
mailing list