GRExprEngine now expects the LiveVariables information to be provided by its creator.

This allows an optimization in AnalysisConsumer where the same LiveVariables information is used between multiple analyses.

llvm-svn: 53046
This commit is contained in:
Ted Kremenek 2008-07-02 20:13:38 +00:00
parent abfd3a8162
commit 125d4a3b2d
3 changed files with 9 additions and 11 deletions

View File

@ -154,6 +154,7 @@ namespace {
if (!liveness) {
liveness.reset(new LiveVariables(*getCFG()));
liveness->runOnCFG(*getCFG());
liveness->runOnAllBlocks(*getCFG(), 0, true);
}
return liveness.get();
}
@ -284,7 +285,8 @@ static void ActionGRExprEngine(AnalysisManager& mgr, GRTransferFuncs* tf) {
mgr.DisplayFunction();
// Construct the analysis engine.
GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext());
GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext(),
*mgr.getLiveVariables());
Eng.setTransferFunctions(tf);
// Execute the worklist algorithm.

View File

@ -57,7 +57,7 @@ protected:
/// Liveness - live-variables information the ValueDecl* and block-level
/// Expr* in the CFG. Used to prune out dead state.
LiveVariables Liveness;
LiveVariables& Liveness;
/// DeadSymbols - A scratch set used to record the set of symbols that
/// were just marked dead by a call to ValueStateManager::RemoveDeadBindings.
@ -180,7 +180,7 @@ protected:
UndefArgsTy MsgExprUndefArgs;
public:
GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx);
GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx, LiveVariables& L);
~GRExprEngine();
void ExecuteWorkList(unsigned Steps = 150000) {

View File

@ -39,11 +39,12 @@ static inline Selector GetNullarySelector(const char* name, ASTContext& Ctx) {
}
GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx)
GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx,
LiveVariables& L)
: CoreEngine(cfg, CD, Ctx, *this),
G(CoreEngine.getGraph()),
Parents(0),
Liveness(G.getCFG()),
Liveness(L),
Builder(NULL),
StateMgr(G.getContext(), G.getAllocator()),
BasicVals(StateMgr.getBasicValueFactory()),
@ -51,12 +52,7 @@ GRExprEngine::GRExprEngine(CFG& cfg, Decl& CD, ASTContext& Ctx)
SymMgr(StateMgr.getSymbolManager()),
CurrentStmt(NULL),
NSExceptionII(NULL), NSExceptionInstanceRaiseSelectors(NULL),
RaiseSel(GetNullarySelector("raise", G.getContext())) {
// Compute liveness information.
Liveness.runOnCFG(G.getCFG());
Liveness.runOnAllBlocks(G.getCFG(), NULL, true);
}
RaiseSel(GetNullarySelector("raise", G.getContext())) {}
GRExprEngine::~GRExprEngine() {
for (BugTypeSet::iterator I = BugTypes.begin(), E = BugTypes.end(); I!=E; ++I)