aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/DataStructure/Printer.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-11-18 21:42:45 +0000
committerChris Lattner <sabre@nondot.org>2002-11-18 21:42:45 +0000
commit49a1ed07abb894548dfa3a417d38edcb6ef169ff (patch)
tree9438f6709507db3081bcc253016fb00983d22c35 /lib/Analysis/DataStructure/Printer.cpp
parentc59a1ba33b68be1bf9bea525cc977c17d805372d (diff)
Add stats
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4747 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/Printer.cpp')
-rw-r--r--lib/Analysis/DataStructure/Printer.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/Analysis/DataStructure/Printer.cpp b/lib/Analysis/DataStructure/Printer.cpp
index 8b6bdcf6dc..d8856b8390 100644
--- a/lib/Analysis/DataStructure/Printer.cpp
+++ b/lib/Analysis/DataStructure/Printer.cpp
@@ -11,6 +11,7 @@
#include "llvm/Assembly/Writer.h"
#include "Support/CommandLine.h"
#include "Support/GraphWriter.h"
+#include "Support/Statistic.h"
#include <fstream>
#include <sstream>
using std::string;
@@ -18,7 +19,11 @@ using std::string;
// OnlyPrintMain - The DataStructure printer exposes this option to allow
// printing of only the graph for "main".
//
-static cl::opt<bool> OnlyPrintMain("only-print-main-ds", cl::ReallyHidden);
+namespace {
+ cl::opt<bool> OnlyPrintMain("only-print-main-ds", cl::ReallyHidden);
+ Statistic<> MaxGraphSize ("dsnode", "Maximum graph size");
+ Statistic<> NumFoldedNodes ("dsnode", "Number of folded nodes (in final graph)");
+}
void DSNode::dump() const { print(std::cerr, 0); }
@@ -30,8 +35,8 @@ static string getCaption(const DSNode *N, const DSGraph *G) {
if (N->isNodeCompletelyFolded())
OS << "FOLDED";
else {
- WriteTypeSymbolic(OS, N->getType().Ty, M);
- if (N->getType().isArray)
+ WriteTypeSymbolic(OS, N->getType(), M);
+ if (N->isArray())
OS << " array";
}
if (N->NodeType) {
@@ -89,7 +94,7 @@ struct DOTGraphTraits<const DSGraph*> : public DefaultDOTGraphTraits {
if (!isa<GlobalValue>(I->first)) {
std::stringstream OS;
WriteAsOperand(OS, I->first, false, true, G->getFunction().getParent());
- GW.emitSimpleNode(I->first, "plaintext=circle", OS.str());
+ GW.emitSimpleNode(I->first, "", OS.str());
// Add edge from return node to real destination
int EdgeDest = I->second.getOffset() >> DS::PointerShift;
@@ -186,6 +191,12 @@ static void printCollection(const Collection &C, std::ostream &O,
O << "Skipped Writing '" << Prefix+I->getName() << ".dot'... ["
<< Gr.getGraphSize() << "+" << NumCalls << "]\n";
}
+
+ if (MaxGraphSize < Gr.getNodes().size())
+ MaxGraphSize = Gr.getNodes().size();
+ for (unsigned i = 0, e = Gr.getNodes().size(); i != e; ++i)
+ if (Gr.getNodes()[i]->isNodeCompletelyFolded())
+ ++NumFoldedNodes;
}
DSGraph &GG = C.getGlobalsGraph();