summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-06-22 22:08:12 +0000
committerAnna Zaks <ganna@apple.com>2012-06-22 22:08:12 +0000
commit7aa3687bb6a5f4b1c04bef68e96ca0ceafb35a44 (patch)
tree5e4bad44001d6836efa06d0145f17787e008c59e /clang
parente4b6d5e1c1a97c303185a6ec4ee9d671d6690f78 (diff)
downloadbcm5719-llvm-7aa3687bb6a5f4b1c04bef68e96ca0ceafb35a44.tar.gz
bcm5719-llvm-7aa3687bb6a5f4b1c04bef68e96ca0ceafb35a44.zip
[analyzer]scan-build: report the total number of steps analyzer performs
This would be useful to investigate performance issues. llvm-svn: 159038
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp7
-rwxr-xr-xclang/tools/scan-build/ccc-analyzer7
-rwxr-xr-xclang/tools/scan-build/scan-build13
3 files changed, 26 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp b/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
index b75765d336e..3cdfb6ce36e 100644
--- a/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
+++ b/clang/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/clang/tools/scan-build/ccc-analyzer b/clang/tools/scan-build/ccc-analyzer
index 86a36161f9f..b8f7193dd65 100755
--- a/clang/tools/scan-build/ccc-analyzer
+++ b/clang/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/clang/tools/scan-build/scan-build b/clang/tools/scan-build/scan-build
index 7bcd5c243c7..424e15a9b13 100755
--- a/clang/tools/scan-build/scan-build
+++ b/clang/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;
}
OpenPOWER on IntegriCloud