[PATCH] D136716: [JumpThreading] Put a limit on the PHI nodes when duplicating a BB.
Usman Nadeem via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 25 15:43:44 PDT 2022
mnadeem created this revision.
mnadeem added reviewers: efriedma, nikic.
Herald added a subscriber: hiraditya.
Herald added a project: All.
mnadeem requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Do not duplicate a BB if it has a lot of PHI nodes.
If a threadable chain is too long then the number of duplicated PHI nodes
can add up, leading to a substantial increase in compile time when rewriting
the SSA.
Fixes https://github.com/llvm/llvm-project/issues/58203
The threshold of 76 in this patch is reasonably high and reduces the compile
time of cldwat2m_macro.f90 in SPEC2017/cam4 from 80+min to <2min.
https://reviews.llvm.org/D136716
Files:
llvm/lib/Transforms/Scalar/JumpThreading.cpp
Index: llvm/lib/Transforms/Scalar/JumpThreading.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/JumpThreading.cpp
+++ llvm/lib/Transforms/Scalar/JumpThreading.cpp
@@ -100,6 +100,11 @@
"condition to use to thread over a weaker condition"),
cl::init(3), cl::Hidden);
+static cl::opt<unsigned> PhiDuplicateThreshold(
+ "jump-threading-phi-threshold",
+ cl::desc("Max PHIs in BB to duplicate for jump threading"), cl::init(76),
+ cl::Hidden);
+
static cl::opt<bool> PrintLVIAfterJumpThreading(
"print-lvi-after-jump-threading",
cl::desc("Print the LazyValueInfo cache after JumpThreading"), cl::init(false),
@@ -518,6 +523,18 @@
Instruction *StopAt,
unsigned Threshold) {
assert(StopAt->getParent() == BB && "Not an instruction from proper BB?");
+
+ // Do not duplicate the BB if it has a lot of PHI nodes.
+ // If a threadable chain is too long then the number of PHI nodes can add up,
+ // leading to a substantial increase in compile time when rewriting the SSA.
+ unsigned PhiCount = 0;
+ for (Instruction &I : *BB) {
+ if (!isa<PHINode>(&I))
+ break;
+ if (++PhiCount > PhiDuplicateThreshold)
+ return ~0U;
+ }
+
/// Ignore PHI nodes, these will be flattened when duplication happens.
BasicBlock::const_iterator I(BB->getFirstNonPHI());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136716.470633.patch
Type: text/x-patch
Size: 1456 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221025/42b3ef3e/attachment.bin>
More information about the llvm-commits
mailing list