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