summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Analysis/RegionPrinter.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
commitb64793999546ed8adebaeebd9d8345d18db8927d (patch)
tree4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/lib/Analysis/RegionPrinter.cpp
parentAdd support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff)
downloadwireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz
wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/lib/Analysis/RegionPrinter.cpp')
-rw-r--r--gnu/llvm/lib/Analysis/RegionPrinter.cpp267
1 files changed, 0 insertions, 267 deletions
diff --git a/gnu/llvm/lib/Analysis/RegionPrinter.cpp b/gnu/llvm/lib/Analysis/RegionPrinter.cpp
deleted file mode 100644
index 5986b8c4e0c..00000000000
--- a/gnu/llvm/lib/Analysis/RegionPrinter.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-//===- RegionPrinter.cpp - Print regions tree pass ------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-// Print out the region tree of a function using dotty/graphviz.
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Analysis/RegionPrinter.h"
-#include "llvm/ADT/DepthFirstIterator.h"
-#include "llvm/ADT/PostOrderIterator.h"
-#include "llvm/ADT/Statistic.h"
-#include "llvm/Analysis/DOTGraphTraitsPass.h"
-#include "llvm/Analysis/Passes.h"
-#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/Analysis/RegionIterator.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-#ifndef NDEBUG
-#include "llvm/IR/LegacyPassManager.h"
-#endif
-
-using namespace llvm;
-
-//===----------------------------------------------------------------------===//
-/// onlySimpleRegion - Show only the simple regions in the RegionViewer.
-static cl::opt<bool>
-onlySimpleRegions("only-simple-regions",
- cl::desc("Show only simple regions in the graphviz viewer"),
- cl::Hidden,
- cl::init(false));
-
-namespace llvm {
-template<>
-struct DOTGraphTraits<RegionNode*> : public DefaultDOTGraphTraits {
-
- DOTGraphTraits (bool isSimple=false)
- : DefaultDOTGraphTraits(isSimple) {}
-
- std::string getNodeLabel(RegionNode *Node, RegionNode *Graph) {
-
- if (!Node->isSubRegion()) {
- BasicBlock *BB = Node->getNodeAs<BasicBlock>();
-
- if (isSimple())
- return DOTGraphTraits<const Function*>
- ::getSimpleNodeLabel(BB, BB->getParent());
- else
- return DOTGraphTraits<const Function*>
- ::getCompleteNodeLabel(BB, BB->getParent());
- }
-
- return "Not implemented";
- }
-};
-
-template <>
-struct DOTGraphTraits<RegionInfo *> : public DOTGraphTraits<RegionNode *> {
-
- DOTGraphTraits (bool isSimple = false)
- : DOTGraphTraits<RegionNode*>(isSimple) {}
-
- static std::string getGraphName(const RegionInfo *) { return "Region Graph"; }
-
- std::string getNodeLabel(RegionNode *Node, RegionInfo *G) {
- return DOTGraphTraits<RegionNode *>::getNodeLabel(
- Node, reinterpret_cast<RegionNode *>(G->getTopLevelRegion()));
- }
-
- std::string getEdgeAttributes(RegionNode *srcNode,
- GraphTraits<RegionInfo *>::ChildIteratorType CI,
- RegionInfo *G) {
- RegionNode *destNode = *CI;
-
- if (srcNode->isSubRegion() || destNode->isSubRegion())
- return "";
-
- // In case of a backedge, do not use it to define the layout of the nodes.
- BasicBlock *srcBB = srcNode->getNodeAs<BasicBlock>();
- BasicBlock *destBB = destNode->getNodeAs<BasicBlock>();
-
- Region *R = G->getRegionFor(destBB);
-
- while (R && R->getParent())
- if (R->getParent()->getEntry() == destBB)
- R = R->getParent();
- else
- break;
-
- if (R && R->getEntry() == destBB && R->contains(srcBB))
- return "constraint=false";
-
- return "";
- }
-
- // Print the cluster of the subregions. This groups the single basic blocks
- // and adds a different background color for each group.
- static void printRegionCluster(const Region &R, GraphWriter<RegionInfo *> &GW,
- unsigned depth = 0) {
- raw_ostream &O = GW.getOStream();
- O.indent(2 * depth) << "subgraph cluster_" << static_cast<const void*>(&R)
- << " {\n";
- O.indent(2 * (depth + 1)) << "label = \"\";\n";
-
- if (!onlySimpleRegions || R.isSimple()) {
- O.indent(2 * (depth + 1)) << "style = filled;\n";
- O.indent(2 * (depth + 1)) << "color = "
- << ((R.getDepth() * 2 % 12) + 1) << "\n";
-
- } else {
- O.indent(2 * (depth + 1)) << "style = solid;\n";
- O.indent(2 * (depth + 1)) << "color = "
- << ((R.getDepth() * 2 % 12) + 2) << "\n";
- }
-
- for (const auto &RI : R)
- printRegionCluster(*RI, GW, depth + 1);
-
- const RegionInfo &RI = *static_cast<const RegionInfo*>(R.getRegionInfo());
-
- for (auto *BB : R.blocks())
- if (RI.getRegionFor(BB) == &R)
- O.indent(2 * (depth + 1)) << "Node"
- << static_cast<const void*>(RI.getTopLevelRegion()->getBBNode(BB))
- << ";\n";
-
- O.indent(2 * depth) << "}\n";
- }
-
- static void addCustomGraphFeatures(const RegionInfo *G,
- GraphWriter<RegionInfo *> &GW) {
- raw_ostream &O = GW.getOStream();
- O << "\tcolorscheme = \"paired12\"\n";
- printRegionCluster(*G->getTopLevelRegion(), GW, 4);
- }
-};
-} //end namespace llvm
-
-namespace {
-
-struct RegionInfoPassGraphTraits {
- static RegionInfo *getGraph(RegionInfoPass *RIP) {
- return &RIP->getRegionInfo();
- }
-};
-
-struct RegionPrinter
- : public DOTGraphTraitsPrinter<RegionInfoPass, false, RegionInfo *,
- RegionInfoPassGraphTraits> {
- static char ID;
- RegionPrinter()
- : DOTGraphTraitsPrinter<RegionInfoPass, false, RegionInfo *,
- RegionInfoPassGraphTraits>("reg", ID) {
- initializeRegionPrinterPass(*PassRegistry::getPassRegistry());
- }
-};
-char RegionPrinter::ID = 0;
-
-struct RegionOnlyPrinter
- : public DOTGraphTraitsPrinter<RegionInfoPass, true, RegionInfo *,
- RegionInfoPassGraphTraits> {
- static char ID;
- RegionOnlyPrinter()
- : DOTGraphTraitsPrinter<RegionInfoPass, true, RegionInfo *,
- RegionInfoPassGraphTraits>("reg", ID) {
- initializeRegionOnlyPrinterPass(*PassRegistry::getPassRegistry());
- }
-};
-char RegionOnlyPrinter::ID = 0;
-
-struct RegionViewer
- : public DOTGraphTraitsViewer<RegionInfoPass, false, RegionInfo *,
- RegionInfoPassGraphTraits> {
- static char ID;
- RegionViewer()
- : DOTGraphTraitsViewer<RegionInfoPass, false, RegionInfo *,
- RegionInfoPassGraphTraits>("reg", ID) {
- initializeRegionViewerPass(*PassRegistry::getPassRegistry());
- }
-};
-char RegionViewer::ID = 0;
-
-struct RegionOnlyViewer
- : public DOTGraphTraitsViewer<RegionInfoPass, true, RegionInfo *,
- RegionInfoPassGraphTraits> {
- static char ID;
- RegionOnlyViewer()
- : DOTGraphTraitsViewer<RegionInfoPass, true, RegionInfo *,
- RegionInfoPassGraphTraits>("regonly", ID) {
- initializeRegionOnlyViewerPass(*PassRegistry::getPassRegistry());
- }
-};
-char RegionOnlyViewer::ID = 0;
-
-} //end anonymous namespace
-
-INITIALIZE_PASS(RegionPrinter, "dot-regions",
- "Print regions of function to 'dot' file", true, true)
-
-INITIALIZE_PASS(
- RegionOnlyPrinter, "dot-regions-only",
- "Print regions of function to 'dot' file (with no function bodies)", true,
- true)
-
-INITIALIZE_PASS(RegionViewer, "view-regions", "View regions of function",
- true, true)
-
-INITIALIZE_PASS(RegionOnlyViewer, "view-regions-only",
- "View regions of function (with no function bodies)",
- true, true)
-
-FunctionPass *llvm::createRegionPrinterPass() { return new RegionPrinter(); }
-
-FunctionPass *llvm::createRegionOnlyPrinterPass() {
- return new RegionOnlyPrinter();
-}
-
-FunctionPass* llvm::createRegionViewerPass() {
- return new RegionViewer();
-}
-
-FunctionPass* llvm::createRegionOnlyViewerPass() {
- return new RegionOnlyViewer();
-}
-
-#ifndef NDEBUG
-static void viewRegionInfo(RegionInfo *RI, bool ShortNames) {
- assert(RI && "Argument must be non-null");
-
- llvm::Function *F = RI->getTopLevelRegion()->getEntry()->getParent();
- std::string GraphName = DOTGraphTraits<RegionInfo *>::getGraphName(RI);
-
- llvm::ViewGraph(RI, "reg", ShortNames,
- Twine(GraphName) + " for '" + F->getName() + "' function");
-}
-
-static void invokeFunctionPass(const Function *F, FunctionPass *ViewerPass) {
- assert(F && "Argument must be non-null");
- assert(!F->isDeclaration() && "Function must have an implementation");
-
- // The viewer and analysis passes do not modify anything, so we can safely
- // remove the const qualifier
- auto NonConstF = const_cast<Function *>(F);
-
- llvm::legacy::FunctionPassManager FPM(NonConstF->getParent());
- FPM.add(ViewerPass);
- FPM.doInitialization();
- FPM.run(*NonConstF);
- FPM.doFinalization();
-}
-
-void llvm::viewRegion(RegionInfo *RI) { viewRegionInfo(RI, false); }
-
-void llvm::viewRegion(const Function *F) {
- invokeFunctionPass(F, createRegionViewerPass());
-}
-
-void llvm::viewRegionOnly(RegionInfo *RI) { viewRegionInfo(RI, true); }
-
-void llvm::viewRegionOnly(const Function *F) {
- invokeFunctionPass(F, createRegionOnlyViewerPass());
-}
-#endif