Add passes -view-cfg and -view-cfg-only that are like -print-cfg and
authorDan Gohman <gohman@apple.com>
Mon, 14 May 2007 14:25:08 +0000 (14:25 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 14 May 2007 14:25:08 +0000 (14:25 +0000)
-print-cfg-only except they use the ViewCFG function, which displays the
CFG rendered with graphviz with gv.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37033 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFGPrinter.cpp

index c98cfe4daee5ea0dc07adf573222983306152ef1..cc0f6b43182ada94850abd5d1efc632a067db1fa 100644 (file)
@@ -90,6 +90,48 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits {
 }
 
 namespace {
+  struct VISIBILITY_HIDDEN CFGViewer : public FunctionPass {
+    static char ID; // Pass identifcation, replacement for typeid
+    CFGViewer() : FunctionPass((intptr_t)&ID) {}
+
+    virtual bool runOnFunction(Function &F) {
+      F.viewCFG();
+      return false;
+    }
+
+    void print(std::ostream &OS, const Module* = 0) const {}
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
+  };
+
+  char CFGViewer::ID = 0;
+  RegisterPass<CFGViewer> V0("view-cfg",
+                             "View CFG of function");
+
+  struct VISIBILITY_HIDDEN CFGOnlyViewer : public FunctionPass {
+    static char ID; // Pass identifcation, replacement for typeid
+    CFGOnlyViewer() : FunctionPass((intptr_t)&ID) {}
+
+    virtual bool runOnFunction(Function &F) {
+      CFGOnly = true;
+      F.viewCFG();
+      CFGOnly = false;
+      return false;
+    }
+
+    void print(std::ostream &OS, const Module* = 0) const {}
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
+  };
+
+  char CFGOnlyViewer::ID = 0;
+  RegisterPass<CFGOnlyViewer> V1("view-cfg-only",
+                                 "View CFG of function (with no function bodies)");
+
   struct VISIBILITY_HIDDEN CFGPrinter : public FunctionPass {
     static char ID; // Pass identification, replacement for typeid
     CFGPrinter() : FunctionPass((intptr_t)&ID) {}