Skip to content

Reapply [IR] Lazily initialize the class to pass name mapping (NFC) (#96321) #96462

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions llvm/include/llvm/IR/PassInstrumentation.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ class PassInstrumentationCallbacks {
AnalysesClearedCallbacks.emplace_back(std::move(C));
}

template <typename CallableT>
void registerClassToPassNameCallback(CallableT C) {
ClassToPassNameCallbacks.emplace_back(std::move(C));
}

/// Add a class name to pass name mapping for use by pass instrumentation.
void addClassToPassName(StringRef ClassName, StringRef PassName);
/// Get the pass name for a given pass class name.
Expand Down Expand Up @@ -185,6 +190,7 @@ class PassInstrumentationCallbacks {
SmallVector<llvm::unique_function<AnalysesClearedFunc>, 4>
AnalysesClearedCallbacks;

SmallVector<llvm::unique_function<void ()>, 4> ClassToPassNameCallbacks;
DenseMap<StringRef, std::string> ClassToPassName;
};

Expand Down
10 changes: 7 additions & 3 deletions llvm/include/llvm/Passes/TargetPassRegistry.inc
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,12 @@
#error "must provide <Target>PassRegistry.def"
#endif

if (PopulateClassToPassNames) {
auto *PIC = PB.getPassInstrumentationCallbacks();

auto *PIC = PB.getPassInstrumentationCallbacks();
if (PIC) {
PIC->registerClassToPassNameCallback([this, PIC]() {
// MSVC requires this to be captured if it's used inside decltype.
// Other compilers consider it an unused lambda capture.
(void)this;
#define ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS) \
PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
#define ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS) \
Expand Down Expand Up @@ -69,6 +72,7 @@ if (PopulateClassToPassNames) {
#undef MACHINE_FUNCTION_PASS_WITH_PARAMS
#undef ADD_CLASS_PASS_TO_PASS_NAME
#undef ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS
});
}

#define ADD_PASS(NAME, CREATE_PASS) \
Expand Down
3 changes: 1 addition & 2 deletions llvm/include/llvm/Target/TargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -369,8 +369,7 @@ class TargetMachine {

/// Allow the target to modify the pass pipeline.
// TODO: Populate all pass names by using <Target>PassRegistry.def.
virtual void registerPassBuilderCallbacks(PassBuilder &,
bool PopulateClassToPassNames) {}
virtual void registerPassBuilderCallbacks(PassBuilder &) {}

/// Allow the target to register alias analyses with the AAManager for use
/// with the new pass manager. Only affects the "default" AAManager.
Expand Down
5 changes: 5 additions & 0 deletions llvm/lib/IR/PassInstrumentation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName,

StringRef
PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) {
if (!ClassToPassNameCallbacks.empty()) {
for (auto &Fn : ClassToPassNameCallbacks)
Fn();
ClassToPassNameCallbacks.clear();
}
return ClassToPassName[ClassName];
}

Expand Down
22 changes: 7 additions & 15 deletions llvm/lib/Passes/PassBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -325,18 +325,6 @@ AnalysisKey NoOpLoopAnalysis::Key;

namespace {

/// Whether or not we should populate a PassInstrumentationCallbacks's class to
/// pass name map.
///
/// This is for optimization purposes so we don't populate it if we never use
/// it. This should be updated if new pass instrumentation wants to use the map.
/// We currently only use this for --print-before/after.
bool shouldPopulateClassToPassNames() {
return PrintPipelinePasses || !printBeforePasses().empty() ||
!printAfterPasses().empty() || !isFilterPassesEmpty() ||
TargetPassConfig::hasLimitedCodeGenPipeline();
}

// A pass for testing -print-on-crash.
// DO NOT USE THIS EXCEPT FOR TESTING!
class TriggerCrashPass : public PassInfoMixin<TriggerCrashPass> {
Expand Down Expand Up @@ -416,10 +404,13 @@ PassBuilder::PassBuilder(TargetMachine *TM, PipelineTuningOptions PTO,
std::optional<PGOOptions> PGOOpt,
PassInstrumentationCallbacks *PIC)
: TM(TM), PTO(PTO), PGOOpt(PGOOpt), PIC(PIC) {
bool ShouldPopulateClassToPassNames = PIC && shouldPopulateClassToPassNames();
if (TM)
TM->registerPassBuilderCallbacks(*this, ShouldPopulateClassToPassNames);
if (ShouldPopulateClassToPassNames) {
TM->registerPassBuilderCallbacks(*this);
if (PIC) {
PIC->registerClassToPassNameCallback([this, PIC]() {
// MSVC requires this to be captured if it's used inside decltype.
// Other compilers consider it an unused lambda capture.
(void)this;
#define MODULE_PASS(NAME, CREATE_PASS) \
PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
#define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) \
Expand Down Expand Up @@ -453,6 +444,7 @@ PassBuilder::PassBuilder(TargetMachine *TM, PipelineTuningOptions PTO,
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) \
PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
#include "llvm/Passes/MachinePassRegistry.def"
});
}
}

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -554,8 +554,7 @@ class AArch64PassConfig : public TargetPassConfig {

} // end anonymous namespace

void AArch64TargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void AArch64TargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {

PB.registerLateLoopOptimizationsEPCallback(
[=](LoopPassManager &LPM, OptimizationLevel Level) {
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AArch64/AArch64TargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ class AArch64TargetMachine : public LLVMTargetMachine {
// Pass Pipeline Configuration
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;

TargetTransformInfo getTargetTransformInfo(const Function &F) const override;

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -658,8 +658,7 @@ Error AMDGPUTargetMachine::buildCodeGenPipeline(
return CGPB.buildPipeline(MPM, Out, DwoOut, FileType);
}

void AMDGPUTargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void AMDGPUTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {

#define GET_PASS_REGISTRY "AMDGPUPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ class AMDGPUTargetMachine : public LLVMTargetMachine {
const CGPassBuilderOption &Opts,
PassInstrumentationCallbacks *PIC) override;

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;
void registerDefaultAliasAnalyses(AAManager &) override;

/// Get the integer value of a null pointer in the given address space.
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/BPF/BPFTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,7 @@ static Expected<bool> parseBPFPreserveStaticOffsetOptions(StringRef Params) {
"BPFPreserveStaticOffsetPass");
}

void BPFTargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void BPFTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "BPFPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/BPF/BPFTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ class BPFTargetMachine : public LLVMTargetMachine {
return TLOF.get();
}

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;
};
}

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,7 @@ DirectXTargetMachine::DirectXTargetMachine(const Target &T, const Triple &TT,

DirectXTargetMachine::~DirectXTargetMachine() {}

void DirectXTargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void DirectXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "DirectXPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"
}
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/DirectX/DirectXTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ class DirectXTargetMachine : public LLVMTargetMachine {
}

TargetTransformInfo getTargetTransformInfo(const Function &F) const override;
void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;
};
} // namespace llvm

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,7 @@ HexagonTargetMachine::getSubtargetImpl(const Function &F) const {
return I.get();
}

void HexagonTargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void HexagonTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "HexagonPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/Hexagon/HexagonTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ class HexagonTargetMachine : public LLVMTargetMachine {
~HexagonTargetMachine() override;
const HexagonSubtarget *getSubtargetImpl(const Function &F) const override;

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
TargetTransformInfo getTargetTransformInfo(const Function &F) const override;

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,7 @@ void NVPTXTargetMachine::registerDefaultAliasAnalyses(AAManager &AAM) {
AAM.registerFunctionAnalysis<NVPTXAA>();
}

void NVPTXTargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void NVPTXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "NVPTXPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/NVPTX/NVPTXTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ class NVPTXTargetMachine : public LLVMTargetMachine {

void registerDefaultAliasAnalyses(AAManager &AAM) override;

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;

TargetTransformInfo getTargetTransformInfo(const Function &F) const override;

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ Error X86CodeGenPassBuilder::addInstSelector(AddMachinePass &addPass) const {

} // namespace

void X86TargetMachine::registerPassBuilderCallbacks(
PassBuilder &PB, bool PopulateClassToPassNames) {
void X86TargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "X86PassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"
}
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/X86/X86TargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ class X86TargetMachine final : public LLVMTargetMachine {
SMDiagnostic &Error,
SMRange &SourceRange) const override;

void registerPassBuilderCallbacks(PassBuilder &PB,
bool PopulateClassToPassNames) override;
void registerPassBuilderCallbacks(PassBuilder &PB) override;

Error buildCodeGenPipeline(ModulePassManager &, raw_pwrite_stream &,
raw_pwrite_stream *, CodeGenFileType,
Expand Down
Loading