|  | //===- GraphPrinters.cpp - DOT printers for various graph types -----------===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file defines several printers for various different types of graphs used | 
|  | // by the LLVM infrastructure.  It uses the generic graph interface to convert | 
|  | // the graph into a .dot graph.  These graphs can then be processed with the | 
|  | // "dot" tool to convert them to postscript or some other suitable format. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/IR/Dominators.h" | 
|  | #include "llvm/Pass.h" | 
|  |  | 
|  | using namespace llvm; | 
|  |  | 
|  | //===----------------------------------------------------------------------===// | 
|  | //                            DomInfoPrinter Pass | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | namespace { | 
|  | class DomInfoPrinter : public FunctionPass { | 
|  | public: | 
|  | static char ID; // Pass identification, replacement for typeid | 
|  | DomInfoPrinter() : FunctionPass(ID) {} | 
|  |  | 
|  | void getAnalysisUsage(AnalysisUsage &AU) const override { | 
|  | AU.setPreservesAll(); | 
|  | AU.addRequired<DominatorTreeWrapperPass>(); | 
|  | } | 
|  |  | 
|  | bool runOnFunction(Function &F) override { | 
|  | getAnalysis<DominatorTreeWrapperPass>().print(dbgs()); | 
|  | return false; | 
|  | } | 
|  | }; | 
|  | } | 
|  |  | 
|  | char DomInfoPrinter::ID = 0; | 
|  | static RegisterPass<DomInfoPrinter> | 
|  | DIP("print-dom-info", "Dominator Info Printer", true, true); |