136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- IRPrintingPasses.h - Passes to print out IR constructs ---*- C++ -*-===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \file
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// This file defines passes to print out IR in various granularities. The
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// PrintModulePass pass simply prints out the entire module when it is
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// executed. The PrintFunctionPass class is designed to be pipelined with
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// other FunctionPass's, and prints out the functions of the module as they
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// are processed.
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#ifndef LLVM_IR_IR_PRINTING_PASSES_H
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define LLVM_IR_IR_PRINTING_PASSES_H
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/ADT/StringRef.h"
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include <string>
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace llvm {
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass BasicBlockPass;
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass Function;
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass FunctionPass;
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass Module;
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ModulePass;
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass PreservedAnalyses;
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass raw_ostream;
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Create and return a pass that writes the module to the specified
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \c raw_ostream.
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesModulePass *createPrintModulePass(raw_ostream &OS,
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                  const std::string &Banner = "");
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Create and return a pass that prints functions to the specified
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \c raw_ostream as they are processed.
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesFunctionPass *createPrintFunctionPass(raw_ostream &OS,
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                      const std::string &Banner = "");
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Create and return a pass that writes the BB to the specified
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \c raw_ostream.
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesBasicBlockPass *createPrintBasicBlockPass(raw_ostream &OS,
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                          const std::string &Banner = "");
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Pass for printing a Module as LLVM's text IR assembly.
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// Note: This pass is for use with the new pass manager. Use the create...Pass
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// functions above to create passes for use with the legacy pass manager.
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass PrintModulePass {
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  raw_ostream &OS;
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::string Banner;
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespublic:
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PrintModulePass();
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PrintModulePass(raw_ostream &OS, const std::string &Banner = "");
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PreservedAnalyses run(Module *M);
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  static StringRef name() { return "PrintModulePass"; }
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines};
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Pass for printing a Function as LLVM's text IR assembly.
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// Note: This pass is for use with the new pass manager. Use the create...Pass
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// functions above to create passes for use with the legacy pass manager.
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass PrintFunctionPass {
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  raw_ostream &OS;
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::string Banner;
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespublic:
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PrintFunctionPass();
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PrintFunctionPass(raw_ostream &OS, const std::string &Banner = "");
7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  PreservedAnalyses run(Function *F);
7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  static StringRef name() { return "PrintFunctionPass"; }
8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines};
8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // End llvm namespace
8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif
86