diff options
| author | Ivan Kosarev <ivan.kosarev@amd.com> | 2025-08-22 10:05:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-22 10:05:06 +0100 |
| commit | faca8c9ed4642e5122f7401ccb52c70a9cd0e83d (patch) | |
| tree | 88cba99c057a444a2722d77e2e114a97b0661fc2 /llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | |
| parent | 1b4fe26343df9c3b37b0cee08f0cd8cee0868181 (diff) | |
[AMDGPU][NFC] Only include CodeGenPassBuilder.h where needed. (#154769)
Saves around 125-210 MB of compilation memory usage per source for
roughly one third of our backend sources, ~60 MB on average.
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index e393aa198774..e969f9ec8889 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -90,6 +90,7 @@ #include "llvm/IR/PatternMatch.h" #include "llvm/InitializePasses.h" #include "llvm/MC/TargetRegistry.h" +#include "llvm/Passes/CodeGenPassBuilder.h" #include "llvm/Passes/PassBuilder.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/FormatVariadic.h" @@ -125,6 +126,44 @@ using namespace llvm; using namespace llvm::PatternMatch; namespace { +//===----------------------------------------------------------------------===// +// AMDGPU CodeGen Pass Builder interface. +//===----------------------------------------------------------------------===// + +class AMDGPUCodeGenPassBuilder + : public CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine> { + using Base = CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine>; + +public: + AMDGPUCodeGenPassBuilder(GCNTargetMachine &TM, + const CGPassBuilderOption &Opts, + PassInstrumentationCallbacks *PIC); + + void addIRPasses(AddIRPass &) const; + void addCodeGenPrepare(AddIRPass &) const; + void addPreISel(AddIRPass &addPass) const; + void addILPOpts(AddMachinePass &) const; + void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const; + Error addInstSelector(AddMachinePass &) const; + void addPreRewrite(AddMachinePass &) const; + void addMachineSSAOptimization(AddMachinePass &) const; + void addPostRegAlloc(AddMachinePass &) const; + void addPreEmitPass(AddMachinePass &) const; + void addPreEmitRegAlloc(AddMachinePass &) const; + Error addRegAssignmentOptimized(AddMachinePass &) const; + void addPreRegAlloc(AddMachinePass &) const; + void addOptimizedRegAlloc(AddMachinePass &) const; + void addPreSched2(AddMachinePass &) const; + + /// Check if a pass is enabled given \p Opt option. The option always + /// overrides defaults if explicitly used. Otherwise its default will be used + /// given that a pass shall work at an optimization \p Level minimum. + bool isPassEnabled(const cl::opt<bool> &Opt, + CodeGenOptLevel Level = CodeGenOptLevel::Default) const; + void addEarlyCSEOrGVNPass(AddIRPass &) const; + void addStraightLineScalarOptimizationPasses(AddIRPass &) const; +}; + class SGPRRegisterRegAlloc : public RegisterRegAllocBase<SGPRRegisterRegAlloc> { public: SGPRRegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) |
