1b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner//===- DomPrinter.cpp - DOT printer for the dominance trees ------------===// 2b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 3b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// The LLVM Compiler Infrastructure 4b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 5b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// This file is distributed under the University of Illinois Open Source 6b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// License. See LICENSE.TXT for details. 7b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 8b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner//===----------------------------------------------------------------------===// 9b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 10b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// This file defines '-dot-dom' and '-dot-postdom' analysis passes, which emit 11b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// a dom.<fnname>.dot or postdom.<fnname>.dot file for each function in the 12b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// program, with a graph of the dominance/postdominance tree of that 13b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// function. 14b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 15b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// There are also passes available to directly call dotty ('-view-dom' or 16b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// '-view-postdom'). By appending '-only' like '-dot-dom-only' only the 17b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// names of the bbs are printed, but the content is hidden. 18b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// 19b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner//===----------------------------------------------------------------------===// 20b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 21b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner#include "llvm/Analysis/DomPrinter.h" 2223279f18a9759d94579de7e79be61c7aa790b8baTobias Grosser#include "llvm/Analysis/DOTGraphTraitsPass.h" 23b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner#include "llvm/Analysis/PostDominators.h" 24b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 25b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerusing namespace llvm; 26b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 27b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnernamespace llvm { 28b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnertemplate<> 29b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct DOTGraphTraits<DomTreeNode*> : public DefaultDOTGraphTraits { 30a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser 3156f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser DOTGraphTraits (bool isSimple=false) 3256f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser : DefaultDOTGraphTraits(isSimple) {} 33a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser 3456f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser std::string getNodeLabel(DomTreeNode *Node, DomTreeNode *Graph) { 35b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 36b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner BasicBlock *BB = Node->getBlock(); 37b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 38b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner if (!BB) 39b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return "Post dominance root node"; 40b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 4156f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser 4256f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser if (isSimple()) 4356f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser return DOTGraphTraits<const Function*> 443472766f9eb7d66f234c390ce1b3a8b76f0ee9ceDuncan Sands ::getSimpleNodeLabel(BB, BB->getParent()); 4556f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser else 4656f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser return DOTGraphTraits<const Function*> 473472766f9eb7d66f234c390ce1b3a8b76f0ee9ceDuncan Sands ::getCompleteNodeLabel(BB, BB->getParent()); 48b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner } 49b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 50b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 51b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnertemplate<> 52b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct DOTGraphTraits<DominatorTree*> : public DOTGraphTraits<DomTreeNode*> { 53b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 54a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser DOTGraphTraits (bool isSimple=false) 55a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser : DOTGraphTraits<DomTreeNode*>(isSimple) {} 56a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser 57b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static std::string getGraphName(DominatorTree *DT) { 58b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return "Dominator tree"; 59b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner } 60b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 6156f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser std::string getNodeLabel(DomTreeNode *Node, DominatorTree *G) { 6256f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser return DOTGraphTraits<DomTreeNode*>::getNodeLabel(Node, G->getRootNode()); 63b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner } 64b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 65b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 66b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnertemplate<> 67b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct DOTGraphTraits<PostDominatorTree*> 68b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner : public DOTGraphTraits<DomTreeNode*> { 69a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser 70a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser DOTGraphTraits (bool isSimple=false) 71a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser : DOTGraphTraits<DomTreeNode*>(isSimple) {} 72a10d598602308549d87d2c5d9848f5a72fda2b43Tobias Grosser 73b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static std::string getGraphName(PostDominatorTree *DT) { 74b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return "Post dominator tree"; 75b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner } 7656f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser 7756f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser std::string getNodeLabel(DomTreeNode *Node, PostDominatorTree *G ) { 7856f4ef3232850e29c4635d0923910acce8887bd0Tobias Grosser return DOTGraphTraits<DomTreeNode*>::getNodeLabel(Node, G->getRootNode()); 79b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner } 80b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 81b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 82b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 83b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnernamespace { 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct DominatorTreeWrapperPassAnalysisGraphTraits { 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines static DominatorTree *getGraph(DominatorTreeWrapperPass *DTWP) { 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return &DTWP->getDomTree(); 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}; 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct DomViewer : public DOTGraphTraitsViewer< 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPass, false, DominatorTree *, 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits> { 93b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DomViewer() 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines : DOTGraphTraitsViewer<DominatorTreeWrapperPass, false, DominatorTree *, 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits>( 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines "dom", ID) { 98081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializeDomViewerPass(*PassRegistry::getPassRegistry()); 99081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 100b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 101b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct DomOnlyViewer : public DOTGraphTraitsViewer< 10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPass, true, DominatorTree *, 10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits> { 105b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DomOnlyViewer() 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines : DOTGraphTraitsViewer<DominatorTreeWrapperPass, true, DominatorTree *, 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits>( 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines "domonly", ID) { 110081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializeDomOnlyViewerPass(*PassRegistry::getPassRegistry()); 111081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 112b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 113b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 114b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct PostDomViewer 11523279f18a9759d94579de7e79be61c7aa790b8baTobias Grosser : public DOTGraphTraitsViewer<PostDominatorTree, false> { 116b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 117b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner PostDomViewer() : 118081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson DOTGraphTraitsViewer<PostDominatorTree, false>("postdom", ID){ 119081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializePostDomViewerPass(*PassRegistry::getPassRegistry()); 120081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 121b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 122b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 123b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct PostDomOnlyViewer 12423279f18a9759d94579de7e79be61c7aa790b8baTobias Grosser : public DOTGraphTraitsViewer<PostDominatorTree, true> { 125b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 126b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner PostDomOnlyViewer() : 127081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson DOTGraphTraitsViewer<PostDominatorTree, true>("postdomonly", ID){ 128081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializePostDomOnlyViewerPass(*PassRegistry::getPassRegistry()); 129081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 130b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 131b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} // end anonymous namespace 132b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 133b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar DomViewer::ID = 0; 134d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(DomViewer, "view-dom", 135ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson "View dominance tree of function", false, false) 136b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 137b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar DomOnlyViewer::ID = 0; 138d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(DomOnlyViewer, "view-dom-only", 139d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "View dominance tree of function (with no function bodies)", 140ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 141b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 142b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar PostDomViewer::ID = 0; 143d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(PostDomViewer, "view-postdom", 144ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson "View postdominance tree of function", false, false) 145b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 146b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar PostDomOnlyViewer::ID = 0; 147d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(PostDomOnlyViewer, "view-postdom-only", 148d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "View postdominance tree of function " 149d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "(with no function bodies)", 150ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 151b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 152b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnernamespace { 15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct DomPrinter : public DOTGraphTraitsPrinter< 15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPass, false, DominatorTree *, 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits> { 156b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 15736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DomPrinter() 15836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines : DOTGraphTraitsPrinter<DominatorTreeWrapperPass, false, DominatorTree *, 15936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits>( 16036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines "dom", ID) { 161081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializeDomPrinterPass(*PassRegistry::getPassRegistry()); 162081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 163b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 164b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 16536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct DomOnlyPrinter : public DOTGraphTraitsPrinter< 16636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPass, true, DominatorTree *, 16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits> { 168b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 16936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DomOnlyPrinter() 17036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines : DOTGraphTraitsPrinter<DominatorTreeWrapperPass, true, DominatorTree *, 17136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DominatorTreeWrapperPassAnalysisGraphTraits>( 17236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines "domonly", ID) { 173081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializeDomOnlyPrinterPass(*PassRegistry::getPassRegistry()); 174081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 175b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 176b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 177b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct PostDomPrinter 17823279f18a9759d94579de7e79be61c7aa790b8baTobias Grosser : public DOTGraphTraitsPrinter<PostDominatorTree, false> { 179b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 180b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner PostDomPrinter() : 181081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson DOTGraphTraitsPrinter<PostDominatorTree, false>("postdom", ID) { 182081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializePostDomPrinterPass(*PassRegistry::getPassRegistry()); 183081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 184b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 185b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 186b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerstruct PostDomOnlyPrinter 18723279f18a9759d94579de7e79be61c7aa790b8baTobias Grosser : public DOTGraphTraitsPrinter<PostDominatorTree, true> { 188b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner static char ID; 189b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner PostDomOnlyPrinter() : 190081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson DOTGraphTraitsPrinter<PostDominatorTree, true>("postdomonly", ID) { 191081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson initializePostDomOnlyPrinterPass(*PassRegistry::getPassRegistry()); 192081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson } 193b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner}; 194b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} // end anonymous namespace 195b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 196b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 197b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 198b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar DomPrinter::ID = 0; 199d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(DomPrinter, "dot-dom", 200d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "Print dominance tree of function to 'dot' file", 201ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 202b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 203b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar DomOnlyPrinter::ID = 0; 204d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(DomOnlyPrinter, "dot-dom-only", 205d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "Print dominance tree of function to 'dot' file " 206d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "(with no function bodies)", 207ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 208b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 209b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar PostDomPrinter::ID = 0; 210d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(PostDomPrinter, "dot-postdom", 211d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "Print postdominance tree of function to 'dot' file", 212ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 213b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 214b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattnerchar PostDomOnlyPrinter::ID = 0; 215d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(PostDomOnlyPrinter, "dot-postdom-only", 216d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "Print postdominance tree of function to 'dot' file " 217d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen Anderson "(with no function bodies)", 218ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson false, false) 219b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 220b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// Create methods available outside of this file, to use them 221b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// "include/llvm/LinkAllPasses.h". Otherwise the pass would be deleted by 222b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner// the link time optimization. 223b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 224b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createDomPrinterPass() { 225b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new DomPrinter(); 226b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 227b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 228b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createDomOnlyPrinterPass() { 229b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new DomOnlyPrinter(); 230b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 231b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 232b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createDomViewerPass() { 233b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new DomViewer(); 234b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 235b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 236b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createDomOnlyViewerPass() { 237b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new DomOnlyViewer(); 238b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 239b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 240b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createPostDomPrinterPass() { 241b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new PostDomPrinter(); 242b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 243b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 244b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createPostDomOnlyPrinterPass() { 245b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new PostDomOnlyPrinter(); 246b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 247b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 248b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createPostDomViewerPass() { 249b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new PostDomViewer(); 250b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 251b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner 252b839c5577d8ecb884ffb6874a14782797faec9c4Chris LattnerFunctionPass *llvm::createPostDomOnlyViewerPass() { 253b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner return new PostDomOnlyViewer(); 254b839c5577d8ecb884ffb6874a14782797faec9c4Chris Lattner} 255