[PATCH] D120752: [RegAlloc] Add a complexity limit in growRegion() to cap compilation time.
Vasileios Porpodas via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 2 15:22:52 PST 2022
vporpo updated this revision to Diff 412558.
vporpo added a comment.
Herald added a project: All.
Improved the option's description.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D120752/new/
https://reviews.llvm.org/D120752
Files:
llvm/lib/CodeGen/RegAllocGreedy.cpp
Index: llvm/lib/CodeGen/RegAllocGreedy.cpp
===================================================================
--- llvm/lib/CodeGen/RegAllocGreedy.cpp
+++ llvm/lib/CodeGen/RegAllocGreedy.cpp
@@ -133,6 +133,12 @@
"candidate when choosing the best split candidate."),
cl::init(false));
+static cl::opt<long> GrowRegionComplexityBudget(
+ "grow-region-complexity-budget",
+ cl::desc("growRegion() does not scale with the number of BB edges, so "
+ "limit its budget and bail out once we reach the limit."),
+ cl::init(10000), cl::Hidden);
+
static RegisterRegAlloc greedyRegAlloc("greedy", "greedy register allocator",
createGreedyRegisterAllocator);
@@ -784,6 +790,7 @@
unsigned Visited = 0;
#endif
+ long Budget = GrowRegionComplexityBudget;
while (true) {
ArrayRef<unsigned> NewBundles = SpillPlacer->getRecentPositive();
// Find new through blocks in the periphery of PrefRegBundles.
@@ -791,6 +798,9 @@
// Look at all blocks connected to Bundle in the full graph.
ArrayRef<unsigned> Blocks = Bundles->getBlocks(Bundle);
for (unsigned Block : Blocks) {
+ // Limit compilation time by bailing out after we use all our budget.
+ if (Budget-- == 0)
+ return false;
if (!Todo.test(Block))
continue;
Todo.reset(Block);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120752.412558.patch
Type: text/x-patch
Size: 1393 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220302/694ccfc3/attachment.bin>
More information about the llvm-commits
mailing list