16#include "llvm/Config/llvm-config.h"
30#ifdef EXPENSIVE_CHECKS
36#define DEBUG_TYPE "ir"
48ModulePass::~ModulePass() =
default;
51 const std::string &Banner)
const {
60 return "module (" +
M.getName().str() +
")";
63bool ModulePass::skipModule(
Module &M)
const {
69bool Pass::mustPreserveAnalysisID(
char &AID)
const {
70 return Resolver->getAnalysisIfAvailable(&AID) !=
nullptr;
74void Pass::dumpPassStructure(
unsigned Offset) {
83 const PassInfo *PI = PassRegistry::getPassRegistry()->getPassInfo(AID);
86 return "Unnamed pass: implement Pass::getPassName()";
89void Pass::preparePassManager(
PMStack &) {
102void Pass::releaseMemory() {
106void Pass::verifyAnalysis()
const {
110void *Pass::getAdjustedAnalysisPointer(
AnalysisID AID) {
131 OS <<
"Pass::print not implemented for pass: '" << getPassName() <<
"'!\n";
134#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
141#ifdef EXPENSIVE_CHECKS
155ImmutablePass::~ImmutablePass() =
default;
157void ImmutablePass::initializePass() {
166 const std::string &Banner)
const {
175 return "function (" +
F.getName().str() +
")";
178bool FunctionPass::skipFunction(
const Function &
F)
const {
184 if (
F.hasOptNone()) {
185 LLVM_DEBUG(
dbgs() <<
"Skipping pass '" << getPassName() <<
"' on function "
186 <<
F.getName() <<
"\n");
192const PassInfo *Pass::lookupPassInfo(
const void *TI) {
193 return PassRegistry::getPassRegistry()->getPassInfo(TI);
197 return PassRegistry::getPassRegistry()->getPassInfo(Arg);
201 const PassInfo *PI = PassRegistry::getPassRegistry()->getPassInfo(
ID);
213void PassRegistrationListener::enumeratePasses() {
214 PassRegistry::getPassRegistry()->enumerateWith(
this);
219 PassRegistry::getPassRegistry()->addRegistrationListener(
this);
225PassNameParser::~PassNameParser() =
default;
238 GetCFGOnlyPasses(
VectorType &L) : CFGOnlyList(
L) {}
240 void passEnumerate(
const PassInfo *
P)
override {
241 if (
P->isCFGOnlyPass())
242 CFGOnlyList.push_back(
P->getTypeInfo());
256void AnalysisUsage::setPreservesCFG() {
259 GetCFGOnlyPasses(Preserved).enumeratePasses();
263 const PassInfo *PI = Pass::lookupPassInfo(Arg);
271 pushUnique(Required,
ID);
276 pushUnique(Required, &
ID);
281 pushUnique(Required, &
ID);
282 pushUnique(RequiredTransitive, &
ID);
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
static std::string getDescription(const CallGraphSCC &SCC)
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
This file contains an interface for creating legacy passes to print out IR in various granularities.
Module.h This file contains the declarations for the Module class.
This file declares the interface for bisecting optimizations.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
AnalysisResolver - Simple interface used by Pass objects to pull all analysis information out of pass...
Represent the analysis usage information of a pass.
ImmutablePass class - This class is used to provide information that does not need to be run.
A Module instance is used to store all the information related to an LLVM module.
Extensions to this class implement mechanisms to disable passes and individual optimizations at compi...
virtual bool isEnabled() const
isEnabled() should return true before calling shouldRunPass().
virtual bool shouldRunPass(const StringRef PassName, StringRef IRDescription)
IRDescription is a textual description of the IR unit the pass is running over.
PMDataManager provides the common place to manage the analysis data used by pass managers.
PMStack - This class implements a stack data structure of PMDataManager pointers.
PassInfo class - An instance of this class exists for every pass known by the system,...
StringRef getPassName() const
getPassName - Return the friendly name for the pass, never returns null
Pass * createPass() const
createPass() - Use this method to create an instance of this pass.
const void * getTypeInfo() const
getTypeInfo - Return the id object for the pass... TODO : Rename
Pass interface - Implemented by all 'passes'.
Interface for looking up the initializer for a variable name, used by Init::resolveReferences.
StringRef - Represent a constant reference to a string, i.e.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
This is an optimization pass for GlobalISel generic memory operations.
PassManagerType
Different types of internal pass managers.
@ PMT_ModulePassManager
MPPassManager.
@ PMT_FunctionPassManager
FPPassManager.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
ModulePass * createPrintModulePass(raw_ostream &OS, const std::string &Banner="", bool ShouldPreserveUseListOrder=false)
Create and return a pass that writes the module to the specified raw_ostream.
FunctionPass * createPrintFunctionPass(raw_ostream &OS, const std::string &Banner="")
Create and return a pass that prints functions to the specified raw_ostream as they are processed.
stable_hash StructuralHash(const Function &F, bool DetailedHash=false)
Returns a hash of the function F.
PassRegistrationListener class - This class is meant to be derived from by clients that are intereste...