From 7aac3a9048870dce1f33be4c36ecc268d87db77b Mon Sep 17 00:00:00 2001 From: Anna Thomas Date: Fri, 30 Oct 2020 12:48:18 -0400 Subject: [PATCH] [CFG] Replace hardcoded max BBs explored as CL option. NFC. This option was hardcoded to 32. Changing this as a CL option since we have seen some cases downstream where increasing this limit allows us to disprove reachability. Reviewed-By: jdoerfert Differential Revision: https://reviews.llvm.org/D90487 --- llvm/lib/Analysis/CFG.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Analysis/CFG.cpp b/llvm/lib/Analysis/CFG.cpp index b46a695..d87da3d 100644 --- a/llvm/lib/Analysis/CFG.cpp +++ b/llvm/lib/Analysis/CFG.cpp @@ -14,9 +14,18 @@ #include "llvm/Analysis/CFG.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/IR/Dominators.h" +#include "llvm/Support/CommandLine.h" using namespace llvm; +// The max number of basic blocks explored during reachability analysis between +// two basic blocks. This is kept reasonably small to limit compile time when +// repeatedly used by clients of this analysis (such as captureTracking). +static cl::opt DefaultMaxBBsToExplore( + "dom-tree-reachability-max-bbs-to-explore", cl::Hidden, + cl::desc("Max number of BBs to explore for reachability analysis"), + cl::init(32)); + /// FindFunctionBackedges - Analyze the specified function to find all of the /// loop backedges in the function and return them. This is a relatively cheap /// (compared to computing dominators and loop info) analysis. @@ -152,9 +161,7 @@ bool llvm::isPotentiallyReachableFromMany( const Loop *StopLoop = LI ? getOutermostLoop(LI, StopBB) : nullptr; - // Limit the number of blocks we visit. The goal is to avoid run-away compile - // times on large CFGs without hampering sensible code. Arbitrarily chosen. - unsigned Limit = 32; + unsigned Limit = DefaultMaxBBsToExplore; SmallPtrSet Visited; do { BasicBlock *BB = Worklist.pop_back_val(); -- 2.7.4