//===-- RegionPrinter.h - Region printer external interface -----*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines external functions that can be called to explicitly
// instantiate the region printer.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_ANALYSIS_REGIONPRINTER_H
#define LLVM_ANALYSIS_REGIONPRINTER_H

namespace llvm {
  class FunctionPass;
  class Function;
  class RegionInfo;

  FunctionPass *createRegionViewerPass();
  FunctionPass *createRegionOnlyViewerPass();
  FunctionPass *createRegionPrinterPass();
  FunctionPass *createRegionOnlyPrinterPass();

#ifndef NDEBUG
  /// @brief Open a viewer to display the GraphViz vizualization of the analysis
  /// result.
  ///
  /// Practical to call in the debugger.
  /// Includes the instructions in each BasicBlock.
  ///
  /// @param RI The analysis to display.
  void viewRegion(llvm::RegionInfo *RI);

  /// @brief Analyze the regions of a function and open its GraphViz
  /// visualization in a viewer.
  ///
  /// Useful to call in the debugger.
  /// Includes the instructions in each BasicBlock.
  /// The result of a new analysis may differ from the RegionInfo the pass
  /// manager currently holds.
  ///
  /// @param F Function to analyze.
  void viewRegion(const llvm::Function *F);

  /// @brief Open a viewer to display the GraphViz vizualization of the analysis
  /// result.
  ///
  /// Useful to call in the debugger.
  /// Shows only the BasicBlock names without their instructions.
  ///
  /// @param RI The analysis to display.
  void viewRegionOnly(llvm::RegionInfo *RI);

  /// @brief Analyze the regions of a function and open its GraphViz
  /// visualization in a viewer.
  ///
  /// Useful to call in the debugger.
  /// Shows only the BasicBlock names without their instructions.
  /// The result of a new analysis may differ from the RegionInfo the pass
  /// manager currently holds.
  ///
  /// @param F Function to analyze.
  void viewRegionOnly(const llvm::Function *F);
#endif
} // End llvm namespace

#endif
