Changeset View
Changeset View
Standalone View
Standalone View
include/llvm/Passes/StandardInstrumentations.h
Show All 10 Lines | |||||
/// This header defines a class that provides bookkeeping for all standard | /// This header defines a class that provides bookkeeping for all standard | ||||
/// (i.e in-tree) pass instrumentations. | /// (i.e in-tree) pass instrumentations. | ||||
/// | /// | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
#ifndef LLVM_PASSES_STANDARDINSTRUMENTATIONS_H | #ifndef LLVM_PASSES_STANDARDINSTRUMENTATIONS_H | ||||
#define LLVM_PASSES_STANDARDINSTRUMENTATIONS_H | #define LLVM_PASSES_STANDARDINSTRUMENTATIONS_H | ||||
#include "llvm/ADT/SmallVector.h" | |||||
#include "llvm/IR/PassInstrumentation.h" | #include "llvm/IR/PassInstrumentation.h" | ||||
#include "llvm/IR/PassTimingInfo.h" | #include "llvm/IR/PassTimingInfo.h" | ||||
#include <string> | |||||
#include <utility> | |||||
namespace llvm { | namespace llvm { | ||||
class Module; | |||||
/// Instrumentation to print IR before/after passes. | |||||
/// | |||||
/// Needs state to be able to print module after pass that invalidates IR unit | |||||
/// (typically Loop or SCC). | |||||
class PrintIRInstrumentation { | |||||
public: | |||||
PrintIRInstrumentation() = default; | |||||
~PrintIRInstrumentation(); | |||||
void registerCallbacks(PassInstrumentationCallbacks &PIC); | |||||
private: | |||||
bool printBeforePass(StringRef PassID, Any IR); | |||||
void printAfterPass(StringRef PassID, Any IR); | |||||
void printAfterPassInvalidated(StringRef PassID); | |||||
using PrintModuleDesc = std::tuple<const Module *, std::string, StringRef>; | |||||
void pushModuleDesc(StringRef PassID, Any IR); | |||||
PrintModuleDesc popModuleDesc(StringRef PassID); | |||||
/// Stack of Module description, enough to print the module after a given | |||||
/// pass. | |||||
SmallVector<PrintModuleDesc, 2> ModuleDescStack; | |||||
bool StoreModuleDesc = false; | |||||
}; | |||||
/// This class provides an interface to register all the standard pass | /// This class provides an interface to register all the standard pass | ||||
/// instrumentations and manages their state (if any). | /// instrumentations and manages their state (if any). | ||||
class StandardInstrumentations { | class StandardInstrumentations { | ||||
PrintIRInstrumentation PrintIR; | |||||
TimePassesHandler TimePasses; | TimePassesHandler TimePasses; | ||||
public: | public: | ||||
StandardInstrumentations() = default; | StandardInstrumentations() = default; | ||||
void registerCallbacks(PassInstrumentationCallbacks &PIC); | void registerCallbacks(PassInstrumentationCallbacks &PIC); | ||||
}; | }; | ||||
} // namespace llvm | } // namespace llvm | ||||
#endif | #endif |