|
90 | 90 | #include "llvm/IR/PatternMatch.h" |
91 | 91 | #include "llvm/InitializePasses.h" |
92 | 92 | #include "llvm/MC/TargetRegistry.h" |
| 93 | +#include "llvm/Passes/CodeGenPassBuilder.h" |
93 | 94 | #include "llvm/Passes/PassBuilder.h" |
94 | 95 | #include "llvm/Support/Compiler.h" |
95 | 96 | #include "llvm/Support/FormatVariadic.h" |
@@ -125,6 +126,44 @@ using namespace llvm; |
125 | 126 | using namespace llvm::PatternMatch; |
126 | 127 |
|
127 | 128 | namespace { |
| 129 | +//===----------------------------------------------------------------------===// |
| 130 | +// AMDGPU CodeGen Pass Builder interface. |
| 131 | +//===----------------------------------------------------------------------===// |
| 132 | + |
| 133 | +class AMDGPUCodeGenPassBuilder |
| 134 | + : public CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine> { |
| 135 | + using Base = CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine>; |
| 136 | + |
| 137 | +public: |
| 138 | + AMDGPUCodeGenPassBuilder(GCNTargetMachine &TM, |
| 139 | + const CGPassBuilderOption &Opts, |
| 140 | + PassInstrumentationCallbacks *PIC); |
| 141 | + |
| 142 | + void addIRPasses(AddIRPass &) const; |
| 143 | + void addCodeGenPrepare(AddIRPass &) const; |
| 144 | + void addPreISel(AddIRPass &addPass) const; |
| 145 | + void addILPOpts(AddMachinePass &) const; |
| 146 | + void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const; |
| 147 | + Error addInstSelector(AddMachinePass &) const; |
| 148 | + void addPreRewrite(AddMachinePass &) const; |
| 149 | + void addMachineSSAOptimization(AddMachinePass &) const; |
| 150 | + void addPostRegAlloc(AddMachinePass &) const; |
| 151 | + void addPreEmitPass(AddMachinePass &) const; |
| 152 | + void addPreEmitRegAlloc(AddMachinePass &) const; |
| 153 | + Error addRegAssignmentOptimized(AddMachinePass &) const; |
| 154 | + void addPreRegAlloc(AddMachinePass &) const; |
| 155 | + void addOptimizedRegAlloc(AddMachinePass &) const; |
| 156 | + void addPreSched2(AddMachinePass &) const; |
| 157 | + |
| 158 | + /// Check if a pass is enabled given \p Opt option. The option always |
| 159 | + /// overrides defaults if explicitly used. Otherwise its default will be used |
| 160 | + /// given that a pass shall work at an optimization \p Level minimum. |
| 161 | + bool isPassEnabled(const cl::opt<bool> &Opt, |
| 162 | + CodeGenOptLevel Level = CodeGenOptLevel::Default) const; |
| 163 | + void addEarlyCSEOrGVNPass(AddIRPass &) const; |
| 164 | + void addStraightLineScalarOptimizationPasses(AddIRPass &) const; |
| 165 | +}; |
| 166 | + |
128 | 167 | class SGPRRegisterRegAlloc : public RegisterRegAllocBase<SGPRRegisterRegAlloc> { |
129 | 168 | public: |
130 | 169 | SGPRRegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) |
|
0 commit comments