Viewing file: DomPrinter.h (4.18 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===-- DomPrinter.h - Dom printer external interface ------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines external functions that can be called to explicitly // instantiate the dominance tree printer. // //===----------------------------------------------------------------------===//
#ifndef LLVM_ANALYSIS_DOMPRINTER_H #define LLVM_ANALYSIS_DOMPRINTER_H
#include "llvm/Analysis/DOTGraphTraitsPass.h" #include "llvm/Analysis/PostDominators.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/PassManager.h"
namespace llvm {
template <> struct DOTGraphTraits<DomTreeNode *> : public DefaultDOTGraphTraits {
DOTGraphTraits(bool isSimple = false) : DefaultDOTGraphTraits(isSimple) {}
std::string getNodeLabel(DomTreeNode *Node, DomTreeNode *Graph) {
BasicBlock *BB = Node->getBlock();
if (!BB) return "Post dominance root node";
if (isSimple()) return DOTGraphTraits<DOTFuncInfo *>::getSimpleNodeLabel(BB, nullptr);
return DOTGraphTraits<DOTFuncInfo *>::getCompleteNodeLabel(BB, nullptr); } };
template <> struct DOTGraphTraits<DominatorTree *> : public DOTGraphTraits<DomTreeNode *> {
DOTGraphTraits(bool isSimple = false) : DOTGraphTraits<DomTreeNode *>(isSimple) {}
static std::string getGraphName(DominatorTree *DT) { return "Dominator tree"; }
std::string getNodeLabel(DomTreeNode *Node, DominatorTree *G) { return DOTGraphTraits<DomTreeNode *>::getNodeLabel(Node, G->getRootNode()); } };
template<> struct DOTGraphTraits<PostDominatorTree *> : public DOTGraphTraits<DomTreeNode*> {
DOTGraphTraits (bool isSimple=false) : DOTGraphTraits<DomTreeNode*>(isSimple) {}
static std::string getGraphName(PostDominatorTree *DT) { return "Post dominator tree"; }
std::string getNodeLabel(DomTreeNode *Node, PostDominatorTree *G) { return DOTGraphTraits<DomTreeNode*>::getNodeLabel(Node, G->getRootNode()); } };
struct DomViewer final : DOTGraphTraitsViewer<DominatorTreeAnalysis, false> { DomViewer() : DOTGraphTraitsViewer<DominatorTreeAnalysis, false>("dom") {} };
struct DomOnlyViewer final : DOTGraphTraitsViewer<DominatorTreeAnalysis, true> { DomOnlyViewer() : DOTGraphTraitsViewer<DominatorTreeAnalysis, true>("domonly") {} };
struct PostDomViewer final : DOTGraphTraitsViewer<PostDominatorTreeAnalysis, false> { PostDomViewer() : DOTGraphTraitsViewer<PostDominatorTreeAnalysis, false>("postdom") {} };
struct PostDomOnlyViewer final : DOTGraphTraitsViewer<PostDominatorTreeAnalysis, true> { PostDomOnlyViewer() : DOTGraphTraitsViewer<PostDominatorTreeAnalysis, true>("postdomonly") {} };
struct DomPrinter final : DOTGraphTraitsPrinter<DominatorTreeAnalysis, false> { DomPrinter() : DOTGraphTraitsPrinter<DominatorTreeAnalysis, false>("dom") {} };
struct DomOnlyPrinter final : DOTGraphTraitsPrinter<DominatorTreeAnalysis, true> { DomOnlyPrinter() : DOTGraphTraitsPrinter<DominatorTreeAnalysis, true>("domonly") {} };
struct PostDomPrinter final : DOTGraphTraitsPrinter<PostDominatorTreeAnalysis, false> { PostDomPrinter() : DOTGraphTraitsPrinter<PostDominatorTreeAnalysis, false>("postdom") {} };
struct PostDomOnlyPrinter final : DOTGraphTraitsPrinter<PostDominatorTreeAnalysis, true> { PostDomOnlyPrinter() : DOTGraphTraitsPrinter<PostDominatorTreeAnalysis, true>("postdomonly") {} }; } // namespace llvm
namespace llvm { class FunctionPass; FunctionPass *createDomPrinterWrapperPassPass(); FunctionPass *createDomOnlyPrinterWrapperPassPass(); FunctionPass *createDomViewerWrapperPassPass(); FunctionPass *createDomOnlyViewerWrapperPassPass(); FunctionPass *createPostDomPrinterWrapperPassPass(); FunctionPass *createPostDomOnlyPrinterWrapperPassPass(); FunctionPass *createPostDomViewerWrapperPassPass(); FunctionPass *createPostDomOnlyViewerWrapperPassPass(); } // End llvm namespace
#endif
|