diff options
author | Anna Zaks <ganna@apple.com> | 2012-03-09 21:14:01 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-03-09 21:14:01 +0000 |
commit | 3fd5f370a28552976c52e76c3035d79012d78dda (patch) | |
tree | 1f1c1ba1daec04eca122fb4ad6a44689b9221868 /lib/StaticAnalyzer/Core/CoreEngine.cpp | |
parent | a5d531f67de0cfeb56b843da15146f3b4cd75bd9 (diff) |
[analyzer] Add support for NoRedundancy inlining mode.
We do not reanalyze a function, which has already been analyzed as an
inlined callee. As per PRELIMINARY testing, this gives over
50% run time reduction on some benchmarks without decreasing of the
number of bugs found.
Turning the mode on by default.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152440 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/CoreEngine.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/CoreEngine.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/StaticAnalyzer/Core/CoreEngine.cpp b/lib/StaticAnalyzer/Core/CoreEngine.cpp index e7c3d2a3b3..a350757a0f 100644 --- a/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ b/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -214,9 +214,16 @@ bool CoreEngine::ExecuteWorkList(const LocationContext *L, unsigned Steps, assert (false && "BlockExit location never occur in forward analysis."); break; - case ProgramPoint::CallEnterKind: - SubEng.processCallEnter(cast<CallEnter>(Node->getLocation()), Node); + case ProgramPoint::CallEnterKind: { + CallEnter CEnter = cast<CallEnter>(Node->getLocation()); + if (AnalyzedCallees) + if (const CallExpr* CE = + dyn_cast_or_null<CallExpr>(CEnter.getCallExpr())) + if (const Decl *CD = CE->getCalleeDecl()) + AnalyzedCallees->insert(CD); + SubEng.processCallEnter(CEnter, Node); break; + } case ProgramPoint::CallExitKind: SubEng.processCallExit(Node); |