1//===-- RegionPrinter.h - Region printer external interface -----*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines external functions that can be called to explicitly
10// instantiate the region printer.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_ANALYSIS_REGIONPRINTER_H
15#define LLVM_ANALYSIS_REGIONPRINTER_H
16
17#include "llvm/Analysis/DOTGraphTraitsPass.h"
18#include "llvm/Analysis/RegionInfo.h"
19
20namespace llvm {
21  class FunctionPass;
22  class Function;
23  class RegionInfo;
24
25  FunctionPass *createRegionViewerPass();
26  FunctionPass *createRegionOnlyViewerPass();
27  FunctionPass *createRegionPrinterPass();
28  FunctionPass *createRegionOnlyPrinterPass();
29
30  template <>
31  struct DOTGraphTraits<RegionNode *> : public DefaultDOTGraphTraits {
32    DOTGraphTraits(bool isSimple = false) : DefaultDOTGraphTraits(isSimple) {}
33
34    std::string getNodeLabel(RegionNode *Node, RegionNode *Graph);
35  };
36
37#ifndef NDEBUG
38  /// Open a viewer to display the GraphViz vizualization of the analysis
39  /// result.
40  ///
41  /// Practical to call in the debugger.
42  /// Includes the instructions in each BasicBlock.
43  ///
44  /// @param RI The analysis to display.
45  void viewRegion(llvm::RegionInfo *RI);
46
47  /// Analyze the regions of a function and open its GraphViz
48  /// visualization in a viewer.
49  ///
50  /// Useful to call in the debugger.
51  /// Includes the instructions in each BasicBlock.
52  /// The result of a new analysis may differ from the RegionInfo the pass
53  /// manager currently holds.
54  ///
55  /// @param F Function to analyze.
56  void viewRegion(const llvm::Function *F);
57
58  /// Open a viewer to display the GraphViz vizualization of the analysis
59  /// result.
60  ///
61  /// Useful to call in the debugger.
62  /// Shows only the BasicBlock names without their instructions.
63  ///
64  /// @param RI The analysis to display.
65  void viewRegionOnly(llvm::RegionInfo *RI);
66
67  /// Analyze the regions of a function and open its GraphViz
68  /// visualization in a viewer.
69  ///
70  /// Useful to call in the debugger.
71  /// Shows only the BasicBlock names without their instructions.
72  /// The result of a new analysis may differ from the RegionInfo the pass
73  /// manager currently holds.
74  ///
75  /// @param F Function to analyze.
76  void viewRegionOnly(const llvm::Function *F);
77#endif
78} // End llvm namespace
79
80#endif
81