From 1e548f12f7cd6631a3e688a9580ede92898d9e69 Mon Sep 17 00:00:00 2001 From: Anna Zaks <ganna@apple.com> Date: Fri, 22 Jun 2012 22:08:12 +0000 Subject: [PATCH] [analyzer]scan-build: report the total number of steps analyzer performs This would be useful to investigate performance issues. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159038 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/StaticAnalyzer/Core/ExplodedGraph.cpp | 7 +++++++ tools/scan-build/ccc-analyzer | 7 +++++++ tools/scan-build/scan-build | 13 ++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/StaticAnalyzer/Core/ExplodedGraph.cpp b/lib/StaticAnalyzer/Core/ExplodedGraph.cpp index b75765d336e..3cdfb6ce36e 100644 --- a/lib/StaticAnalyzer/Core/ExplodedGraph.cpp +++ b/lib/StaticAnalyzer/Core/ExplodedGraph.cpp @@ -11,6 +11,7 @@ // which represent a path-sensitive, intra-procedural "exploded graph." // //===----------------------------------------------------------------------===// +#define DEBUG_TYPE "CoreEngine" #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h" @@ -20,11 +21,15 @@ #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/Statistic.h" #include <vector> using namespace clang; using namespace ento; +STATISTIC(NumNodesWithMoreThanTwoSucc, + "The # of nodes with more than 2 successors."); + //===----------------------------------------------------------------------===// // Node auditing. //===----------------------------------------------------------------------===// @@ -170,6 +175,8 @@ void ExplodedNode::addPredecessor(ExplodedNode *V, ExplodedGraph &G) { assert (!V->isSink()); Preds.addNode(V, G); V->Succs.addNode(this, G); + if (V->Succs.size() == 3) + NumNodesWithMoreThanTwoSucc++; #ifndef NDEBUG if (NodeAuditor) NodeAuditor->AddEdge(V, this); #endif diff --git a/tools/scan-build/ccc-analyzer b/tools/scan-build/ccc-analyzer index 86a36161f9f..b8f7193dd65 100755 --- a/tools/scan-build/ccc-analyzer +++ b/tools/scan-build/ccc-analyzer @@ -438,6 +438,9 @@ my $StoreModel = $ENV{'CCC_ANALYZER_STORE_MODEL'}; # Get the constraints engine. my $ConstraintsModel = $ENV{'CCC_ANALYZER_CONSTRAINTS_MODEL'}; +#Get the internal stats setting. +my $InternalStats = $ENV{'CCC_ANALYZER_INTERNAL_STATS'}; + # Get the output format. my $OutputFormat = $ENV{'CCC_ANALYZER_OUTPUT_FORMAT'}; if (!defined $OutputFormat) { $OutputFormat = "html"; } @@ -642,6 +645,10 @@ if ($Action eq 'compile' or $Action eq 'link') { if (defined $ConstraintsModel) { push @AnalyzeArgs, "-analyzer-constraints=$ConstraintsModel"; } + + if (defined $InternalStats) { + push @AnalyzeArgs, "-analyzer-stats"; + } if (defined $Analyses) { push @AnalyzeArgs, split '\s+', $Analyses; diff --git a/tools/scan-build/scan-build b/tools/scan-build/scan-build index 7bcd5c243c7..424e15a9b13 100755 --- a/tools/scan-build/scan-build +++ b/tools/scan-build/scan-build @@ -1025,7 +1025,8 @@ ADVANCED OPTIONS: -maxloop N - specifiy the number of times a block can be visited before giving up. Default is 4. Increase for more comprehensive coverage at a cost of speed. - + -internal-stats - Generate internal analyzer statistics. + CONTROLLING CHECKERS: A default group of checkers are always run unless explicitly disabled. @@ -1194,6 +1195,7 @@ my $ExitStatusFoundBugs = 0; # Exit status reflects whether bugs were found my @AnalysesToRun; my $StoreModel; my $ConstraintsModel; +my $InternalStats; my $OutputFormat = "html"; my $AnalyzerStats = 0; my $MaxLoop = 0; @@ -1325,6 +1327,12 @@ while (@ARGV) { $ConstraintsModel = shift @ARGV; next; } + + if ($arg eq "-internal-stats") { + shift @ARGV; + $InternalStats = 1; + next; + } if ($arg eq "-plist") { shift @ARGV; @@ -1442,6 +1450,9 @@ if (defined $StoreModel) { if (defined $ConstraintsModel) { $ENV{'CCC_ANALYZER_CONSTRAINTS_MODEL'} = $ConstraintsModel; } +if (defined $InternalStats) { + $ENV{'CCC_ANALYZER_INTERNAL_STATS'} = 1; +} if (defined $OutputFormat) { $ENV{'CCC_ANALYZER_OUTPUT_FORMAT'} = $OutputFormat; } -- GitLab