[llvm] 84eeb82 - [NFC][SimpleLoopUnswitch] unswitchTrivialBranch(): add debug output explaining unswitching failure
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 17 14:46:21 PDT 2021
Author: Roman Lebedev
Date: 2021-06-18T00:46:04+03:00
New Revision: 84eeb82888a033bd02b53023f9408760fc86bd81
URL: https://github.com/llvm/llvm-project/commit/84eeb82888a033bd02b53023f9408760fc86bd81
DIFF: https://github.com/llvm/llvm-project/commit/84eeb82888a033bd02b53023f9408760fc86bd81.diff
LOG: [NFC][SimpleLoopUnswitch] unswitchTrivialBranch(): add debug output explaining unswitching failure
It's not prohibitively verbose, and allows easier understanding
why certain unswitching ultimately wasn't performed.
Added:
Modified:
llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
index c13ae370381f..ddf822ed1bdd 100644
--- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
@@ -443,9 +443,10 @@ static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT,
} else {
if (auto *CondInst = dyn_cast<Instruction>(BI.getCondition()))
Invariants = collectHomogenousInstGraphLoopInvariants(L, *CondInst, LI);
- if (Invariants.empty())
- // Couldn't find invariant inputs!
+ if (Invariants.empty()) {
+ LLVM_DEBUG(dbgs() << " Couldn't find invariant inputs!\n");
return false;
+ }
}
// Check that one of the branch's successors exits, and which one.
@@ -456,13 +457,17 @@ static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT,
ExitDirection = false;
LoopExitSuccIdx = 1;
LoopExitBB = BI.getSuccessor(1);
- if (L.contains(LoopExitBB))
+ if (L.contains(LoopExitBB)) {
+ LLVM_DEBUG(dbgs() << " Branch doesn't exit the loop!\n");
return false;
+ }
}
auto *ContinueBB = BI.getSuccessor(1 - LoopExitSuccIdx);
auto *ParentBB = BI.getParent();
- if (!areLoopExitPHIsLoopInvariant(L, *ParentBB, *LoopExitBB))
+ if (!areLoopExitPHIsLoopInvariant(L, *ParentBB, *LoopExitBB)) {
+ LLVM_DEBUG(dbgs() << " Loop exit PHI's aren't loop-invariant!\n");
return false;
+ }
// When unswitching only part of the branch's condition, we need the exit
// block to be reached directly from the partially unswitched input. This can
@@ -470,12 +475,11 @@ static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT,
// is a graph of `or` operations, or the exit block is along the false edge
// and the condition is a graph of `and` operations.
if (!FullUnswitch) {
- if (ExitDirection) {
- if (!match(BI.getCondition(), m_LogicalOr()))
- return false;
- } else {
- if (!match(BI.getCondition(), m_LogicalAnd()))
- return false;
+ if (ExitDirection ? !match(BI.getCondition(), m_LogicalOr())
+ : !match(BI.getCondition(), m_LogicalAnd())) {
+ LLVM_DEBUG(dbgs() << " Branch condition is in improper form for "
+ "non-full unswitch!\n");
+ return false;
}
}
More information about the llvm-commits
mailing list