1ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner//===- GraphPrinters.cpp - DOT printers for various graph types -----------===// 23da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 37c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell// The LLVM Compiler Infrastructure 47c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell// 521c62da287237d39d0d95004881ea4baae3be6daChris Lattner// This file is distributed under the University of Illinois Open Source 621c62da287237d39d0d95004881ea4baae3be6daChris Lattner// License. See LICENSE.TXT for details. 73da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 87c0e022c5c4be4b11e199a53f73bbdd84e34aa80John Criswell//===----------------------------------------------------------------------===// 9ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// 10ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// This file defines several printers for various different types of graphs used 11ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// by the LLVM infrastructure. It uses the generic graph interface to convert 12ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// the graph into a .dot graph. These graphs can then be processed with the 13ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// "dot" tool to convert them to postscript or some other suitable format. 14ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner// 15ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner//===----------------------------------------------------------------------===// 16ac859db3e4dcfe0626dd7ed4b7a3c54a34986381Chris Lattner 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Dominators.h" 18f010c464a11444733ec67e31aace8bcebeaf2588Chandler Carruth#include "llvm/Pass.h" 193da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman 20a125cacf7d154d0e5cad47f011e619e45517c839Andrew Trickusing namespace llvm; 21a2a3bbc668cdebcc87e18e93b4576d59dfab625cDan Gohman 22687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel//===----------------------------------------------------------------------===// 23687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel// DomInfoPrinter Pass 24687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel//===----------------------------------------------------------------------===// 25687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel 26687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patelnamespace { 27687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel class DomInfoPrinter : public FunctionPass { 28687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel public: 29687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel static char ID; // Pass identification, replacement for typeid 3090c579de5a383cee278acc3f7e7b9d0a656e6a35Owen Anderson DomInfoPrinter() : FunctionPass(ID) {} 31687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void getAnalysisUsage(AnalysisUsage &AU) const override { 33687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel AU.setPreservesAll(); 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines AU.addRequired<DominatorTreeWrapperPass>(); 35687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel } 36687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool runOnFunction(Function &F) override { 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines getAnalysis<DominatorTreeWrapperPass>().dump(); 39687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel return false; 40687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel } 41687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel }; 42687e03b2fa6b08fcd59c4f2f0c4aababdd91a71aDevang Patel} 43a2a3bbc668cdebcc87e18e93b4576d59dfab625cDan Gohman 44a2a3bbc668cdebcc87e18e93b4576d59dfab625cDan Gohmanchar DomInfoPrinter::ID = 0; 45a2a3bbc668cdebcc87e18e93b4576d59dfab625cDan Gohmanstatic RegisterPass<DomInfoPrinter> 46a2a3bbc668cdebcc87e18e93b4576d59dfab625cDan GohmanDIP("print-dom-info", "Dominator Info Printer", true, true); 47