1 //===- GraphPrinters.cpp - DOT printers for various graph types -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines several printers for various different types of graphs used 11 // by the LLVM infrastructure. It uses the generic graph interface to convert 12 // the graph into a .dot graph. These graphs can then be processed with the 13 // "dot" tool to convert them to postscript or some other suitable format. 14 // 15 //===----------------------------------------------------------------------===// 16 17 #include "llvm/IR/Dominators.h" 18 #include "llvm/Pass.h" 19 20 using namespace llvm; 21 22 //===----------------------------------------------------------------------===// 23 // DomInfoPrinter Pass 24 //===----------------------------------------------------------------------===// 25 26 namespace { 27 class DomInfoPrinter : public FunctionPass { 28 public: 29 static char ID; // Pass identification, replacement for typeid DomInfoPrinter()30 DomInfoPrinter() : FunctionPass(ID) {} 31 getAnalysisUsage(AnalysisUsage & AU) const32 void getAnalysisUsage(AnalysisUsage &AU) const override { 33 AU.setPreservesAll(); 34 AU.addRequired<DominatorTreeWrapperPass>(); 35 } 36 runOnFunction(Function & F)37 bool runOnFunction(Function &F) override { 38 getAnalysis<DominatorTreeWrapperPass>().print(dbgs()); 39 return false; 40 } 41 }; 42 } 43 44 char DomInfoPrinter::ID = 0; 45 static RegisterPass<DomInfoPrinter> 46 DIP("print-dom-info", "Dominator Info Printer", true, true); 47