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