LLVM 17.0.0git
AMDGPU.h
Go to the documentation of this file.
1//===-- AMDGPU.h - MachineFunction passes hw codegen --------------*- C++ -*-=//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7/// \file
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPU_H
11#define LLVM_LIB_TARGET_AMDGPU_AMDGPU_H
12
13#include "llvm/IR/PassManager.h"
14#include "llvm/Pass.h"
16
17namespace llvm {
18
19class TargetMachine;
20
21// GlobalISel passes
28
30
31// SI Passes
48
63
64struct AMDGPUSimplifyLibCallsPass : PassInfoMixin<AMDGPUSimplifyLibCallsPass> {
67
68private:
69 TargetMachine &TM;
70};
71
72struct AMDGPUUseNativeCallsPass : PassInfoMixin<AMDGPUUseNativeCallsPass> {
74};
75
77
80
82
88
91extern char &AMDGPUAtomicOptimizerID;
92
95extern char &AMDGPULowerIntrinsicsID;
96
100
104
108
110 : PassInfoMixin<AMDGPUPromoteKernelArgumentsPass> {
112};
113
117
119 : PassInfoMixin<AMDGPULowerKernelAttributesPass> {
121};
122
125
127 : PassInfoMixin<AMDGPUPropagateAttributesEarlyPass> {
130
131private:
132 TargetMachine &TM;
133};
134
137
139 : PassInfoMixin<AMDGPUPropagateAttributesLatePass> {
142
143private:
144 TargetMachine &TM;
145};
146
149
151 : PassInfoMixin<AMDGPUReplaceLDSUseWithPointerPass> {
153};
154
156extern char &AMDGPULowerModuleLDSID;
157
158struct AMDGPULowerModuleLDSPass : PassInfoMixin<AMDGPULowerModuleLDSPass> {
160};
161
163extern char &AMDGPURewriteOutArgumentsID;
164
166extern char &GCNDPPCombineID;
167
169extern char &SIFoldOperandsID;
170
172extern char &SIPeepholeSDWAID;
173
175extern char &SIShrinkInstructionsID;
176
178extern char &SIFixSGPRCopiesID;
179
181extern char &SIFixVGPRCopiesID;
182
184extern char &SILowerI1CopiesID;
185
187extern char &SILowerSGPRSpillsID;
188
190extern char &SILoadStoreOptimizerID;
191
193extern char &SIWholeQuadModeID;
194
196extern char &SILowerControlFlowID;
197
199extern char &SIPreEmitPeepholeID;
200
202extern char &SILateBranchLoweringPassID;
203
205extern char &SIOptimizeExecMaskingID;
206
208extern char &SIPreAllocateWWMRegsID;
209
211extern char &AMDGPUSimplifyLibCallsID;
212
214extern char &AMDGPUUseNativeCallsID;
215
217extern char &AMDGPUPerfHintAnalysisID;
218
219// Passes common to R600 and SI
222extern char &AMDGPUPromoteAllocaID;
223
227
228struct AMDGPUPromoteAllocaPass : PassInfoMixin<AMDGPUPromoteAllocaPass> {
231
232private:
233 TargetMachine &TM;
234};
235
237 : PassInfoMixin<AMDGPUPromoteAllocaToVectorPass> {
240
241private:
242 TargetMachine &TM;
243};
244
247 CodeGenOpt::Level OptLevel);
248ModulePass *createAMDGPUAlwaysInlinePass(bool GlobalOpt = true);
249
250struct AMDGPUAlwaysInlinePass : PassInfoMixin<AMDGPUAlwaysInlinePass> {
251 AMDGPUAlwaysInlinePass(bool GlobalOpt = true) : GlobalOpt(GlobalOpt) {}
253
254private:
255 bool GlobalOpt;
256};
257
259
263
266
268 : PassInfoMixin<AMDGPUPrintfRuntimeBindingPass> {
270};
271
274extern char &AMDGPUUnifyMetadataID;
275
276struct AMDGPUUnifyMetadataPass : PassInfoMixin<AMDGPUUnifyMetadataPass> {
278};
279
282
284extern char &SIOptimizeVGPRLiveRangeID;
285
288
290extern char &AMDGPUCodeGenPrepareID;
291
294
296extern char &AMDGPULateCodeGenPrepareID;
297
301
303extern char &SIAnnotateControlFlowPassID;
304
306extern char &SIMemoryLegalizerID;
307
309extern char &SIModeRegisterID;
310
312extern char &AMDGPUReleaseVGPRsID;
313
315extern char &AMDGPUInsertDelayAluID;
316
318extern char &SIInsertHardClausesID;
319
321extern char &SIInsertWaitcntsID;
322
324extern char &SIFormMemoryClausesID;
325
327extern char &SIPostRABundlerID;
328
330extern char &GCNCreateVOPDID;
331
334
339
341
345
347extern char &GCNNSAReassignID;
348
350extern char &GCNPreRAOptimizationsID;
351
354
355namespace AMDGPU {
363}
364
365/// OpenCL uses address spaces to differentiate between
366/// various memory regions on the hardware. On the CPU
367/// all of the address spaces point to the same memory,
368/// however on the GPU, each address space points to
369/// a separate piece of memory that is unique from other
370/// memory locations.
371namespace AMDGPUAS {
372 enum : unsigned {
373 // The maximum value for flat, generic, local, private, constant and region.
375
376 FLAT_ADDRESS = 0, ///< Address space for flat memory.
377 GLOBAL_ADDRESS = 1, ///< Address space for global memory (RAT0, VTX0).
378 REGION_ADDRESS = 2, ///< Address space for region memory. (GDS)
379
380 CONSTANT_ADDRESS = 4, ///< Address space for constant memory (VTX2).
381 LOCAL_ADDRESS = 3, ///< Address space for local memory.
382 PRIVATE_ADDRESS = 5, ///< Address space for private memory.
383
384 CONSTANT_ADDRESS_32BIT = 6, ///< Address space for 32-bit constant memory.
385
386 BUFFER_FAT_POINTER = 7, ///< Address space for 160-bit buffer fat pointers.
387
388 /// Address space for direct addressable parameter memory (CONST0).
390 /// Address space for indirect addressable parameter memory (VTX1).
392
393 // Do not re-order the CONSTANT_BUFFER_* enums. Several places depend on
394 // this order to be able to dynamically index a constant buffer, for
395 // example:
396 //
397 // ConstantBufferAS = CONSTANT_BUFFER_0 + CBIdx
398
415
416 // Some places use this if the address space can't be determined.
418 };
419}
420
421namespace AMDGPU {
422
423// FIXME: Missing constant_32bit
424inline bool isFlatGlobalAddrSpace(unsigned AS) {
425 return AS == AMDGPUAS::GLOBAL_ADDRESS ||
429}
430
431inline bool isExtendedGlobalAddrSpace(unsigned AS) {
435}
436}
437
438} // End namespace llvm
439
440#endif
#define F(x, y, z)
Definition: MD5.cpp:55
const char LLVMTargetMachineRef TM
This header defines various interfaces for pass management in LLVM.
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:620
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:308
ImmutablePass class - This class is used to provide information that does not need to be run.
Definition: Pass.h:279
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition: Pass.h:248
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
Definition: PassRegistry.h:38
Pass interface - Implemented by all 'passes'.
Definition: Pass.h:91
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:152
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:78
@ CONSTANT_BUFFER_5
Definition: AMDGPU.h:404
@ CONSTANT_BUFFER_15
Definition: AMDGPU.h:414
@ MAX_AMDGPU_ADDRESS
Definition: AMDGPU.h:374
@ CONSTANT_ADDRESS_32BIT
Address space for 32-bit constant memory.
Definition: AMDGPU.h:384
@ CONSTANT_BUFFER_11
Definition: AMDGPU.h:410
@ CONSTANT_BUFFER_6
Definition: AMDGPU.h:405
@ CONSTANT_BUFFER_12
Definition: AMDGPU.h:411
@ PARAM_D_ADDRESS
Address space for direct addressable parameter memory (CONST0).
Definition: AMDGPU.h:389
@ REGION_ADDRESS
Address space for region memory. (GDS)
Definition: AMDGPU.h:378
@ CONSTANT_BUFFER_2
Definition: AMDGPU.h:401
@ CONSTANT_BUFFER_1
Definition: AMDGPU.h:400
@ CONSTANT_BUFFER_0
Definition: AMDGPU.h:399
@ LOCAL_ADDRESS
Address space for local memory.
Definition: AMDGPU.h:381
@ CONSTANT_BUFFER_8
Definition: AMDGPU.h:407
@ CONSTANT_BUFFER_4
Definition: AMDGPU.h:403
@ CONSTANT_BUFFER_3
Definition: AMDGPU.h:402
@ CONSTANT_BUFFER_10
Definition: AMDGPU.h:409
@ PARAM_I_ADDRESS
Address space for indirect addressable parameter memory (VTX1).
Definition: AMDGPU.h:391
@ CONSTANT_ADDRESS
Address space for constant memory (VTX2).
Definition: AMDGPU.h:380
@ UNKNOWN_ADDRESS_SPACE
Definition: AMDGPU.h:417
@ FLAT_ADDRESS
Address space for flat memory.
Definition: AMDGPU.h:376
@ GLOBAL_ADDRESS
Address space for global memory (RAT0, VTX0).
Definition: AMDGPU.h:377
@ CONSTANT_BUFFER_14
Definition: AMDGPU.h:413
@ CONSTANT_BUFFER_9
Definition: AMDGPU.h:408
@ CONSTANT_BUFFER_7
Definition: AMDGPU.h:406
@ CONSTANT_BUFFER_13
Definition: AMDGPU.h:412
@ BUFFER_FAT_POINTER
Address space for 160-bit buffer fat pointers.
Definition: AMDGPU.h:386
@ PRIVATE_ADDRESS
Address space for private memory.
Definition: AMDGPU.h:382
bool isFlatGlobalAddrSpace(unsigned AS)
Definition: AMDGPU.h:424
@ TI_SCRATCH_RSRC_DWORD1
Definition: AMDGPU.h:359
@ TI_SCRATCH_RSRC_DWORD3
Definition: AMDGPU.h:361
@ TI_SCRATCH_RSRC_DWORD0
Definition: AMDGPU.h:358
@ TI_SCRATCH_RSRC_DWORD2
Definition: AMDGPU.h:360
@ TI_CONSTDATA_START
Definition: AMDGPU.h:357
bool isExtendedGlobalAddrSpace(unsigned AS)
Definition: AMDGPU.h:431
Level
Code generation optimization level.
Definition: CodeGen.h:57
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void initializeSIFormMemoryClausesPass(PassRegistry &)
char & SIPreAllocateWWMRegsID
ImmutablePass * createAMDGPUAAWrapperPass()
FunctionPass * createSIPreAllocateWWMRegsPass()
FunctionPass * createAMDGPUSetWavePriorityPass()
char & AMDGPUCtorDtorLoweringLegacyPassID
void initializeAMDGPUUseNativeCallsPass(PassRegistry &)
void initializeGCNCreateVOPDPass(PassRegistry &)
ModulePass * createAMDGPUOpenCLEnqueuedBlockLoweringPass()
char & AMDGPUAnnotateKernelFeaturesID
char & GCNPreRAOptimizationsID
void initializeGCNPreRAOptimizationsPass(PassRegistry &)
char & AMDGPUPropagateAttributesEarlyID
void initializeAMDGPUPerfHintAnalysisPass(PassRegistry &)
char & SIMemoryLegalizerID
void initializeAMDGPUDAGToDAGISelPass(PassRegistry &)
char & SIPostRABundlerID
FunctionPass * createSIModeRegisterPass()
void initializeAMDGPUAAWrapperPassPass(PassRegistry &)
void initializeSIModeRegisterPass(PassRegistry &)
ModulePass * createAMDGPUCtorDtorLoweringLegacyPass()
void initializeSIOptimizeVGPRLiveRangePass(PassRegistry &)
char & AMDGPUSimplifyLibCallsID
void initializeAMDGPULateCodeGenPreparePass(PassRegistry &)
char & AMDGPUPromoteKernelArgumentsID
void initializeAMDGPUAttributorPass(PassRegistry &)
FunctionPass * createAMDGPUPreLegalizeCombiner(bool IsOptNone)
FunctionPass * createAMDGPUPostLegalizeCombiner(bool IsOptNone)
void initializeAMDGPUAnnotateUniformValuesPass(PassRegistry &)
FunctionPass * createAMDGPUISelDag(TargetMachine &TM, CodeGenOpt::Level OptLevel)
This pass converts a legalized DAG into a AMDGPU-specific.
void initializeSIShrinkInstructionsPass(PassRegistry &)
char & SIFoldOperandsID
FunctionPass * createAMDGPURewriteOutArgumentsPass()
char & SILowerI1CopiesID
char & AMDGPUResourceUsageAnalysisID
void initializeAMDGPUPropagateAttributesLatePass(PassRegistry &)
char & AMDGPULowerModuleLDSID
char & SILoadStoreOptimizerID
FunctionPass * createSIWholeQuadModePass()
ModulePass * createAMDGPULowerKernelAttributesPass()
char & AMDGPUReleaseVGPRsID
ModulePass * createAMDGPULowerIntrinsicsPass()
ModulePass * createAMDGPUAlwaysInlinePass(bool GlobalOpt=true)
FunctionPass * createSIPeepholeSDWAPass()
void initializeSIPreEmitPeepholePass(PassRegistry &)
FunctionPass * createSILoadStoreOptimizerPass()
void initializeSIFixVGPRCopiesPass(PassRegistry &)
ModulePass * createAMDGPUUnifyMetadataPass()
void initializeAMDGPUMachineCFGStructurizerPass(PassRegistry &)
void initializeAMDGPURemoveIncompatibleFunctionsPass(PassRegistry &)
void initializeGCNNSAReassignPass(PassRegistry &)
void initializeSIInsertWaitcntsPass(PassRegistry &)
char & SIFormMemoryClausesID
char & AMDGPURemoveIncompatibleFunctionsID
void initializeAMDGPUCtorDtorLoweringLegacyPass(PassRegistry &)
void initializeAMDGPURegBankCombinerPass(PassRegistry &)
void initializeSILoadStoreOptimizerPass(PassRegistry &)
void initializeSILateBranchLoweringPass(PassRegistry &)
void initializeSIPeepholeSDWAPass(PassRegistry &)
FunctionPass * createAMDGPUPromoteAllocaToVector()
char & AMDGPULateCodeGenPrepareID
char & AMDGPUUnifyDivergentExitNodesID
ModulePass * createAMDGPULowerModuleLDSPass()
char & SIInsertWaitcntsID
char & AMDGPUReplaceLDSUseWithPointerID
char & AMDGPUPrintfRuntimeBindingID
char & GCNNSAReassignID
void initializeAMDGPURewriteOutArgumentsPass(PassRegistry &)
void initializeAMDGPUExternalAAWrapperPass(PassRegistry &)
void initializeAMDGPULowerKernelArgumentsPass(PassRegistry &)
char & AMDGPUPerfHintAnalysisID
char & SILowerSGPRSpillsID
char & SILateBranchLoweringPassID
char & SIModeRegisterID
char & AMDGPULowerIntrinsicsID
void initializeAMDGPURewriteUndefForPHIPass(PassRegistry &)
FunctionPass * createGCNPreRAOptimizationsPass()
FunctionPass * createSIShrinkInstructionsPass()
void initializeAMDGPUAnnotateKernelFeaturesPass(PassRegistry &)
void initializeSIPostRABundlerPass(PassRegistry &)
FunctionPass * createAMDGPUAtomicOptimizerPass()
void initializeAMDGPUReplaceLDSUseWithPointerPass(PassRegistry &)
void initializeAMDGPUPromoteAllocaToVectorPass(PassRegistry &)
void initializeAMDGPULowerModuleLDSPass(PassRegistry &)
void initializeSIWholeQuadModePass(PassRegistry &)
FunctionPass * createAMDGPULowerKernelArgumentsPass()
char & AMDGPUInsertDelayAluID
Pass * createAMDGPUAnnotateKernelFeaturesPass()
char & SIOptimizeVGPRLiveRangeID
char & SIOptimizeExecMaskingPreRAID
FunctionPass * createAMDGPUPropagateAttributesEarlyPass(const TargetMachine *)
void initializeSIInsertHardClausesPass(PassRegistry &)
void initializeAMDGPUSimplifyLibCallsPass(PassRegistry &)
FunctionPass * createSIPostRABundlerPass()
FunctionPass * createSIFormMemoryClausesPass()
FunctionPass * createAMDGPUSimplifyLibCallsPass(const TargetMachine *)
void initializeAMDGPUPostLegalizerCombinerPass(PassRegistry &)
Pass * createAMDGPUStructurizeCFGPass()
void initializeSIAnnotateControlFlowPass(PassRegistry &)
ModulePass * createAMDGPUPrintfRuntimeBinding()
void initializeSIMemoryLegalizerPass(PassRegistry &)
char & AMDGPUUnifyMetadataID
ModulePass * createAMDGPUReplaceLDSUseWithPointerPass()
void initializeAMDGPUPropagateAttributesEarlyPass(PassRegistry &)
FunctionPass * createAMDGPUAnnotateUniformValues()
void initializeAMDGPUPreLegalizerCombinerPass(PassRegistry &)
FunctionPass * createAMDGPUPromoteAlloca()
char & SIPreEmitPeepholeID
ModulePass * createAMDGPURemoveIncompatibleFunctionsPass(const TargetMachine *)
FunctionPass * createSILowerI1CopiesPass()
char & AMDGPURewriteOutArgumentsID
void initializeAMDGPUArgumentUsageInfoPass(PassRegistry &)
void initializeSIPreAllocateWWMRegsPass(PassRegistry &)
FunctionPass * createAMDGPUCodeGenPreparePass()
void initializeAMDGPUAtomicOptimizerPass(PassRegistry &)
char & AMDGPUMachineCFGStructurizerID
char & AMDGPULowerKernelAttributesID
char & GCNDPPCombineID
void initializeAMDGPULowerIntrinsicsPass(PassRegistry &)
FunctionPass * createAMDGPURewriteUndefForPHIPass()
FunctionPass * createAMDGPURegBankCombiner(bool IsOptNone)
char & AMDGPUPromoteAllocaID
FunctionPass * createAMDGPUUseNativeCallsPass()
FunctionPass * createSIFoldOperandsPass()
char & SIWholeQuadModeID
void initializeSIOptimizeExecMaskingPreRAPass(PassRegistry &)
ImmutablePass * createAMDGPUExternalAAWrapperPass()
void initializeAMDGPUCodeGenPreparePass(PassRegistry &)
void initializeSILowerSGPRSpillsPass(PassRegistry &)
void initializeAMDGPULowerKernelAttributesPass(PassRegistry &)
char & SIInsertHardClausesID
FunctionPass * createAMDGPUMachineCFGStructurizerPass()
void initializeAMDGPUResourceUsageAnalysisPass(PassRegistry &)
void initializeSIFixSGPRCopiesPass(PassRegistry &)
char & GCNCreateVOPDID
Pass * createAMDGPUAttributorPass()
void initializeSILowerI1CopiesPass(PassRegistry &)
char & SILowerControlFlowID
char & AMDGPUAtomicOptimizerID
char & SIAnnotateControlFlowPassID
void initializeSIOptimizeExecMaskingPass(PassRegistry &)
char & AMDGPUAnnotateUniformValuesPassID
FunctionPass * createSIMemoryLegalizerPass()
ModulePass * createAMDGPUPropagateAttributesLatePass(const TargetMachine *)
void initializeSIFoldOperandsPass(PassRegistry &)
void initializeSILowerControlFlowPass(PassRegistry &)
char & SIPeepholeSDWAID
char & AMDGPUOpenCLEnqueuedBlockLoweringID
char & SIFixVGPRCopiesID
void initializeAMDGPUReleaseVGPRsPass(PassRegistry &)
void initializeAMDGPURegBankSelectPass(PassRegistry &)
FunctionPass * createSIOptimizeVGPRLiveRangePass()
void initializeAMDGPUUnifyDivergentExitNodesPass(PassRegistry &)
FunctionPass * createSIInsertWaitcntsPass()
void initializeGCNDPPCombinePass(PassRegistry &)
FunctionPass * createSIOptimizeExecMaskingPreRAPass()
FunctionPass * createGCNDPPCombinePass()
FunctionPass * createAMDGPULateCodeGenPreparePass()
FunctionPass * createSIFixSGPRCopiesPass()
void initializeAMDGPUPrintfRuntimeBindingPass(PassRegistry &)
void initializeAMDGPUPromoteAllocaPass(PassRegistry &)
void initializeAMDGPUOpenCLEnqueuedBlockLoweringPass(PassRegistry &)
char & AMDGPUPromoteAllocaToVectorID
char & AMDGPURewriteUndefForPHIPassID
void initializeAMDGPUInsertDelayAluPass(PassRegistry &)
char & SIOptimizeExecMaskingID
void initializeAMDGPUUnifyMetadataPass(PassRegistry &)
FunctionPass * createSIFixControlFlowLiveIntervalsPass()
char & SIFixSGPRCopiesID
FunctionPass * createSIAnnotateControlFlowPass()
Create the annotation pass.
char & AMDGPUUseNativeCallsID
char & AMDGPULowerKernelArgumentsID
char & AMDGPUPropagateAttributesLateID
void initializeAMDGPUAlwaysInlinePass(PassRegistry &)
char & AMDGPUCodeGenPrepareID
void initializeAMDGPUSetWavePriorityPass(PassRegistry &)
char & SIShrinkInstructionsID
FunctionPass * createAMDGPUPromoteKernelArgumentsPass()
void initializeAMDGPUPromoteKernelArgumentsPass(PassRegistry &)
AMDGPUAlwaysInlinePass(bool GlobalOpt=true)
Definition: AMDGPU.h:251
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
AMDGPUPromoteAllocaPass(TargetMachine &TM)
Definition: AMDGPU.h:229
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
AMDGPUPromoteAllocaToVectorPass(TargetMachine &TM)
Definition: AMDGPU.h:238
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
AMDGPUPropagateAttributesEarlyPass(TargetMachine &TM)
Definition: AMDGPU.h:128
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
AMDGPUPropagateAttributesLatePass(TargetMachine &TM)
Definition: AMDGPU.h:140
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
AMDGPUSimplifyLibCallsPass(TargetMachine &TM)
Definition: AMDGPU.h:65
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:371