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