summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Frontend
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-03-30 05:48:10 +0000
committerAnna Zaks <ganna@apple.com>2012-03-30 05:48:10 +0000
commit54fd4a076695a480ca55f2c35444fc82842a5bc7 (patch)
treed54cd8fb618456c71aad8407573495ca31609cc4 /clang/lib/StaticAnalyzer/Frontend
parentbc15335e580bd29695df04c30d19c3b5a8192552 (diff)
downloadbcm5719-llvm-54fd4a076695a480ca55f2c35444fc82842a5bc7.tar.gz
bcm5719-llvm-54fd4a076695a480ca55f2c35444fc82842a5bc7.zip
[analyzer] Do not inline functions which previously reached max block
count. This is an optimization for "retry without inlining" option. Here, if we failed to inline a function due to reaching the basic block max count, we are going to store this information and not try to inline it again in the translation unit. This can be viewed as a function summary. On sqlite, with this optimization, we are 30% faster then before and cover 10% more basic blocks (partially because the number of times we reach timeout is decreased by 20%). llvm-svn: 153730
Diffstat (limited to 'clang/lib/StaticAnalyzer/Frontend')
-rw-r--r--clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
index b1d2f31df0e..3b9deda2bac 100644
--- a/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ b/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -104,6 +104,10 @@ public:
/// Time the analyzes time of each translation unit.
static llvm::Timer* TUTotalTimer;
+ /// The information about analyzed functions shared throughout the
+ /// translation unit.
+ FunctionSummariesTy FunctionSummaries;
+
AnalysisConsumer(const Preprocessor& pp,
const std::string& outdir,
const AnalyzerOptions& opts,
@@ -449,7 +453,7 @@ void AnalysisConsumer::ActionExprEngine(Decl *D, bool ObjCGCEnabled,
if (!Mgr->getCFG(D))
return;
- ExprEngine Eng(*Mgr, ObjCGCEnabled, VisitedCallees);
+ ExprEngine Eng(*Mgr, ObjCGCEnabled, VisitedCallees, &FunctionSummaries);
// Set the graph auditor.
OwningPtr<ExplodedNode::Auditor> Auditor;
OpenPOWER on IntegriCloud