mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
units. This was debated back and forth a bunch, but using references is now clearly cleaner. Of all the code written using pointers thus far, in only one place did it really make more sense to have a pointer. In most cases, this just removes immediate dereferencing from the code. I think it is much better to get errors on null IR units earlier, potentially at compile time, than to delay it. Most notably, the legacy pass manager uses references for its routines and so as more and more code works with both, the use of pointers was likely to become really annoying. I noticed this when I ported the domtree analysis over and wrote the entire thing with references only to have it fail to compile. =/ It seemed better to switch now than to delay. We can, of course, revisit this is we learn that references are really problematic in the API. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225145 91177308-0d34-0410-b5e6-96231b3b80d8
86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
//===- IRPrintingPasses.h - Passes to print out IR constructs ---*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \file
|
|
///
|
|
/// This file defines passes to print out IR in various granularities. The
|
|
/// PrintModulePass pass simply prints out the entire module when it is
|
|
/// executed. The PrintFunctionPass class is designed to be pipelined with
|
|
/// other FunctionPass's, and prints out the functions of the module as they
|
|
/// are processed.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_IR_IRPRINTINGPASSES_H
|
|
#define LLVM_IR_IRPRINTINGPASSES_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
class BasicBlockPass;
|
|
class Function;
|
|
class FunctionPass;
|
|
class Module;
|
|
class ModulePass;
|
|
class PreservedAnalyses;
|
|
class raw_ostream;
|
|
|
|
/// \brief Create and return a pass that writes the module to the specified
|
|
/// \c raw_ostream.
|
|
ModulePass *createPrintModulePass(raw_ostream &OS,
|
|
const std::string &Banner = "");
|
|
|
|
/// \brief Create and return a pass that prints functions to the specified
|
|
/// \c raw_ostream as they are processed.
|
|
FunctionPass *createPrintFunctionPass(raw_ostream &OS,
|
|
const std::string &Banner = "");
|
|
|
|
/// \brief Create and return a pass that writes the BB to the specified
|
|
/// \c raw_ostream.
|
|
BasicBlockPass *createPrintBasicBlockPass(raw_ostream &OS,
|
|
const std::string &Banner = "");
|
|
|
|
/// \brief Pass for printing a Module as LLVM's text IR assembly.
|
|
///
|
|
/// Note: This pass is for use with the new pass manager. Use the create...Pass
|
|
/// functions above to create passes for use with the legacy pass manager.
|
|
class PrintModulePass {
|
|
raw_ostream &OS;
|
|
std::string Banner;
|
|
|
|
public:
|
|
PrintModulePass();
|
|
PrintModulePass(raw_ostream &OS, const std::string &Banner = "");
|
|
|
|
PreservedAnalyses run(Module &M);
|
|
|
|
static StringRef name() { return "PrintModulePass"; }
|
|
};
|
|
|
|
/// \brief Pass for printing a Function as LLVM's text IR assembly.
|
|
///
|
|
/// Note: This pass is for use with the new pass manager. Use the create...Pass
|
|
/// functions above to create passes for use with the legacy pass manager.
|
|
class PrintFunctionPass {
|
|
raw_ostream &OS;
|
|
std::string Banner;
|
|
|
|
public:
|
|
PrintFunctionPass();
|
|
PrintFunctionPass(raw_ostream &OS, const std::string &Banner = "");
|
|
|
|
PreservedAnalyses run(Function &F);
|
|
|
|
static StringRef name() { return "PrintFunctionPass"; }
|
|
};
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|