[llvm-commits] CVS: llvm/lib/Analysis/PrintSCC.cpp

Chris Lattner lattner at cs.uiuc.edu
Sun Aug 31 14:24:01 PDT 2003


Changes in directory llvm/lib/Analysis:

PrintSCC.cpp updated: 1.1 -> 1.2

---
Log message:

* Cleanups
* Iterate from tarj_begin -> tarj_end, not from tarj_begin -> NULL



---
Diffs of the changes:

Index: llvm/lib/Analysis/PrintSCC.cpp
diff -u llvm/lib/Analysis/PrintSCC.cpp:1.1 llvm/lib/Analysis/PrintSCC.cpp:1.2
--- llvm/lib/Analysis/PrintSCC.cpp:1.1	Mon Nov  4 08:20:22 2002
+++ llvm/lib/Analysis/PrintSCC.cpp	Sun Aug 31 14:23:41 2003
@@ -1,4 +1,4 @@
-//===- PrintSCC.cpp - Enumerate SCCs in some key graphs ---------*- C++ -*-===//
+//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===//
 //
 // This file provides passes to print out SCCs in a CFG or a CallGraph.
 // Normally, you would not use these passes; instead, you would use the
@@ -14,34 +14,30 @@
 //       analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph
 // 
 // (3) To test the TarjanSCCIterator.
+//
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Pass.h"
 #include "llvm/Module.h"
-#include "llvm/Function.h"
-#include "llvm/BasicBlock.h"
 #include "llvm/Analysis/CallGraph.h"
 #include "llvm/Support/CFG.h"
 #include "Support/TarjanSCCIterator.h"
 
 namespace {
-
-class CFGSCC: public FunctionPass {
-public:
+struct CFGSCC: public FunctionPass {
   bool runOnFunction(Function& func) {
     unsigned long sccNum = 0;
-    const SCC<Function*>* nextSCC;
     std::cout << "SCCs for Function " << func.getName() << " in PostOrder:";
-    for (TarjanSCC_iterator<Function*> tarjSCCiter = tarj_begin(&func);
-         (nextSCC = *tarjSCCiter); ++tarjSCCiter)
-      {
-        std::cout << "\nSCC #" << ++sccNum << " : ";
-        for (SCC<Function*>::const_iterator I=nextSCC->begin(),E=nextSCC->end();
-             I != E; ++I)
-          std::cout << (*I)->getName() << ", ";
-        if (nextSCC->size() == 1 && nextSCC->HasLoop())
-          std::cout << " (Has self-loop).";
-      }
+    for (TarjanSCC_iterator<Function*> I = tarj_begin(&func),
+           E = tarj_end(&func); I != E; ++I) {
+      SCC<Function*> &nextSCC = **I;
+      std::cout << "\nSCC #" << ++sccNum << " : ";
+      for (SCC<Function*>::const_iterator I = nextSCC.begin(),E = nextSCC.end();
+           I != E; ++I)
+        std::cout << (*I)->getName() << ", ";
+      if (nextSCC.size() == 1 && nextSCC.HasLoop())
+        std::cout << " (Has self-loop).";
+    }
     std::cout << "\n";
 
     return true;
@@ -50,26 +46,23 @@
 };
 
 
-class CallGraphSCC: public Pass {
-public:
+struct CallGraphSCC : public Pass {
   // run - Print out SCCs in the call graph for the specified module.
-  bool run(Module& M) {
+  bool run(Module &M) {
     CallGraphNode* rootNode = getAnalysis<CallGraph>().getRoot();
     unsigned long sccNum = 0;
-    const SCC<CallGraphNode*>* nextSCC;
     std::cout << "SCCs for the program in PostOrder:";
-    for (TarjanSCC_iterator<CallGraphNode*> tarjSCCiter = tarj_begin(rootNode);
-         (nextSCC = *tarjSCCiter); ++tarjSCCiter)
-      {
-        std::cout << "\nSCC #" << ++sccNum << " : ";
-        for (SCC<CallGraphNode*>::const_iterator I=nextSCC->begin(),
-               E=nextSCC->end(); I != E; ++I)
-          std::cout << ((*I)->getFunction()? (*I)->getFunction()->getName()
-                                           : std::string("Null CallGraph node"))
-                    << ", ";
-        if (nextSCC->size() == 1 && nextSCC->HasLoop())
-          std::cout << " (Has self-loop).";
-      }
+    for (TarjanSCC_iterator<CallGraphNode*> SCCI = tarj_begin(rootNode),
+         E = tarj_end(rootNode); SCCI != E; ++SCCI) {
+      const SCC<CallGraphNode*> &nextSCC = **SCCI;
+      std::cout << "\nSCC #" << ++sccNum << " : ";
+      for (SCC<CallGraphNode*>::const_iterator I = nextSCC.begin(),
+             E = nextSCC.end(); I != E; ++I)
+        std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName()
+                      : std::string("Indirect CallGraph node")) << ", ";
+      if (nextSCC.size() == 1 && nextSCC.HasLoop())
+        std::cout << " (Has self-loop).";
+    }
     std::cout << "\n";
 
     return true;
@@ -84,10 +77,9 @@
   }
 };
 
-static RegisterAnalysis<CFGSCC>
-Y("cfgscc", "Print SCCs of each function CFG");
-
-static RegisterAnalysis<CallGraphSCC>
-Z("callscc", "Print SCCs of the Call Graph");
+  RegisterAnalysis<CFGSCC>
+  Y("cfgscc", "Print SCCs of each function CFG");
 
+  RegisterAnalysis<CallGraphSCC>
+  Z("callscc", "Print SCCs of the Call Graph");
 }





More information about the llvm-commits mailing list