1 | //===- AMDGPUPassRegistry.def - Registry of AMDGPU passes -------*- 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 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file is used as the registry of passes that are part of the |
10 | // AMDGPU backend. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | // NOTE: NO INCLUDE GUARD DESIRED! |
15 | |
16 | #ifndef MODULE_PASS |
17 | #define MODULE_PASS(NAME, CREATE_PASS) |
18 | #endif |
19 | MODULE_PASS("amdgpu-always-inline" , AMDGPUAlwaysInlinePass()) |
20 | MODULE_PASS("amdgpu-export-kernel-runtime-handles" , AMDGPUExportKernelRuntimeHandlesPass()) |
21 | MODULE_PASS("amdgpu-lower-buffer-fat-pointers" , |
22 | AMDGPULowerBufferFatPointersPass(*this)) |
23 | MODULE_PASS("amdgpu-lower-ctor-dtor" , AMDGPUCtorDtorLoweringPass()) |
24 | MODULE_PASS("amdgpu-lower-module-lds" , AMDGPULowerModuleLDSPass(*this)) |
25 | MODULE_PASS("amdgpu-perf-hint" , |
26 | AMDGPUPerfHintAnalysisPass( |
27 | *static_cast<const GCNTargetMachine *>(this))) |
28 | MODULE_PASS("amdgpu-preload-kernel-arguments" , AMDGPUPreloadKernelArgumentsPass(*this)) |
29 | MODULE_PASS("amdgpu-printf-runtime-binding" , AMDGPUPrintfRuntimeBindingPass()) |
30 | MODULE_PASS("amdgpu-remove-incompatible-functions" , AMDGPURemoveIncompatibleFunctionsPass(*this)) |
31 | MODULE_PASS("amdgpu-sw-lower-lds" , AMDGPUSwLowerLDSPass(*this)) |
32 | MODULE_PASS("amdgpu-unify-metadata" , AMDGPUUnifyMetadataPass()) |
33 | #undef MODULE_PASS |
34 | |
35 | #ifndef MODULE_PASS_WITH_PARAMS |
36 | #define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) |
37 | #endif |
38 | MODULE_PASS_WITH_PARAMS( |
39 | "amdgpu-attributor" , "AMDGPUAttributorPass" , |
40 | [=](AMDGPUAttributorOptions Options) { |
41 | return AMDGPUAttributorPass(*this, Options); |
42 | }, |
43 | parseAMDGPUAttributorPassOptions, "closed-world" ) |
44 | #undef MODULE_PASS_WITH_PARAMS |
45 | |
46 | #ifndef FUNCTION_PASS |
47 | #define FUNCTION_PASS(NAME, CREATE_PASS) |
48 | #endif |
49 | FUNCTION_PASS("amdgpu-annotate-uniform" , AMDGPUAnnotateUniformValuesPass()) |
50 | FUNCTION_PASS("amdgpu-codegenprepare" , AMDGPUCodeGenPreparePass(*this)) |
51 | FUNCTION_PASS("amdgpu-image-intrinsic-opt" , |
52 | AMDGPUImageIntrinsicOptimizerPass(*this)) |
53 | FUNCTION_PASS("amdgpu-late-codegenprepare" , |
54 | AMDGPULateCodeGenPreparePass( |
55 | *static_cast<const GCNTargetMachine *>(this))) |
56 | FUNCTION_PASS("amdgpu-lower-kernel-arguments" , |
57 | AMDGPULowerKernelArgumentsPass(*this)) |
58 | FUNCTION_PASS("amdgpu-lower-kernel-attributes" , |
59 | AMDGPULowerKernelAttributesPass()) |
60 | FUNCTION_PASS("amdgpu-promote-alloca" , AMDGPUPromoteAllocaPass(*this)) |
61 | FUNCTION_PASS("amdgpu-promote-alloca-to-vector" , |
62 | AMDGPUPromoteAllocaToVectorPass(*this)) |
63 | FUNCTION_PASS("amdgpu-promote-kernel-arguments" , |
64 | AMDGPUPromoteKernelArgumentsPass()) |
65 | FUNCTION_PASS("amdgpu-rewrite-undef-for-phi" , AMDGPURewriteUndefForPHIPass()) |
66 | FUNCTION_PASS("amdgpu-simplifylib" , AMDGPUSimplifyLibCallsPass()) |
67 | FUNCTION_PASS("amdgpu-unify-divergent-exit-nodes" , |
68 | AMDGPUUnifyDivergentExitNodesPass()) |
69 | FUNCTION_PASS("amdgpu-usenative" , AMDGPUUseNativeCallsPass()) |
70 | FUNCTION_PASS("si-annotate-control-flow" , SIAnnotateControlFlowPass(*static_cast<const GCNTargetMachine *>(this))) |
71 | #undef FUNCTION_PASS |
72 | |
73 | #ifndef FUNCTION_ANALYSIS |
74 | #define FUNCTION_ANALYSIS(NAME, CREATE_PASS) |
75 | #endif |
76 | |
77 | #ifndef FUNCTION_ALIAS_ANALYSIS |
78 | #define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS) \ |
79 | FUNCTION_ANALYSIS(NAME, CREATE_PASS) |
80 | #endif |
81 | FUNCTION_ALIAS_ANALYSIS("amdgpu-aa" , AMDGPUAA()) |
82 | #undef FUNCTION_ALIAS_ANALYSIS |
83 | #undef FUNCTION_ANALYSIS |
84 | |
85 | #ifndef FUNCTION_PASS_WITH_PARAMS |
86 | #define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) |
87 | #endif |
88 | FUNCTION_PASS_WITH_PARAMS( |
89 | "amdgpu-atomic-optimizer" , |
90 | "AMDGPUAtomicOptimizerPass" , |
91 | [=](ScanOptions Strategy) { |
92 | return AMDGPUAtomicOptimizerPass(*this, Strategy); |
93 | }, |
94 | parseAMDGPUAtomicOptimizerStrategy, "strategy=dpp|iterative|none" ) |
95 | #undef FUNCTION_PASS_WITH_PARAMS |
96 | |
97 | #ifndef MACHINE_FUNCTION_PASS |
98 | #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) |
99 | #endif |
100 | MACHINE_FUNCTION_PASS("amdgpu-insert-delay-alu" , AMDGPUInsertDelayAluPass()) |
101 | MACHINE_FUNCTION_PASS("amdgpu-isel" , AMDGPUISelDAGToDAGPass(*this)) |
102 | MACHINE_FUNCTION_PASS("amdgpu-mark-last-scratch-load" , AMDGPUMarkLastScratchLoadPass()) |
103 | MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg" , GCNPreRALongBranchRegPass()) |
104 | MACHINE_FUNCTION_PASS("amdgpu-reserve-wwm-regs" , AMDGPUReserveWWMRegsPass()) |
105 | MACHINE_FUNCTION_PASS("amdgpu-rewrite-agpr-copy-mfma" , AMDGPURewriteAGPRCopyMFMAPass()) |
106 | MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses" , GCNRewritePartialRegUsesPass()) |
107 | MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority" , AMDGPUSetWavePriorityPass()) |
108 | MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations" , GCNPreRAOptimizationsPass()) |
109 | MACHINE_FUNCTION_PASS("amdgpu-preload-kern-arg-prolog" , AMDGPUPreloadKernArgPrologPass()) |
110 | MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign" , GCNNSAReassignPass()) |
111 | MACHINE_FUNCTION_PASS("gcn-create-vopd" , GCNCreateVOPDPass()) |
112 | MACHINE_FUNCTION_PASS("gcn-dpp-combine" , GCNDPPCombinePass()) |
113 | MACHINE_FUNCTION_PASS("si-fix-sgpr-copies" , SIFixSGPRCopiesPass()) |
114 | MACHINE_FUNCTION_PASS("si-fix-vgpr-copies" , SIFixVGPRCopiesPass()) |
115 | MACHINE_FUNCTION_PASS("si-fold-operands" , SIFoldOperandsPass()); |
116 | MACHINE_FUNCTION_PASS("si-form-memory-clauses" , SIFormMemoryClausesPass()) |
117 | MACHINE_FUNCTION_PASS("si-i1-copies" , SILowerI1CopiesPass()) |
118 | MACHINE_FUNCTION_PASS("si-insert-hard-clauses" , SIInsertHardClausesPass()) |
119 | MACHINE_FUNCTION_PASS("si-insert-waitcnts" , SIInsertWaitcntsPass()) |
120 | MACHINE_FUNCTION_PASS("si-late-branch-lowering" , SILateBranchLoweringPass()) |
121 | MACHINE_FUNCTION_PASS("si-load-store-opt" , SILoadStoreOptimizerPass()) |
122 | MACHINE_FUNCTION_PASS("si-lower-control-flow" , SILowerControlFlowPass()) |
123 | MACHINE_FUNCTION_PASS("si-lower-sgpr-spills" , SILowerSGPRSpillsPass()) |
124 | MACHINE_FUNCTION_PASS("si-lower-wwm-copies" , SILowerWWMCopiesPass()) |
125 | MACHINE_FUNCTION_PASS("si-memory-legalizer" , SIMemoryLegalizerPass()) |
126 | MACHINE_FUNCTION_PASS("si-mode-register" , SIModeRegisterPass()) |
127 | MACHINE_FUNCTION_PASS("si-opt-vgpr-liverange" , SIOptimizeVGPRLiveRangePass()) |
128 | MACHINE_FUNCTION_PASS("si-optimize-exec-masking" , SIOptimizeExecMaskingPass()) |
129 | MACHINE_FUNCTION_PASS("si-optimize-exec-masking-pre-ra" , SIOptimizeExecMaskingPreRAPass()) |
130 | MACHINE_FUNCTION_PASS("si-peephole-sdwa" , SIPeepholeSDWAPass()) |
131 | MACHINE_FUNCTION_PASS("si-post-ra-bundler" , SIPostRABundlerPass()) |
132 | MACHINE_FUNCTION_PASS("si-pre-allocate-wwm-regs" , SIPreAllocateWWMRegsPass()) |
133 | MACHINE_FUNCTION_PASS("si-pre-emit-peephole" , SIPreEmitPeepholePass()) |
134 | MACHINE_FUNCTION_PASS("si-shrink-instructions" , SIShrinkInstructionsPass()) |
135 | MACHINE_FUNCTION_PASS("si-wqm" , SIWholeQuadModePass()) |
136 | #undef MACHINE_FUNCTION_PASS |
137 | |
138 | #define DUMMY_MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) |
139 | // Global ISel passes |
140 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-prelegalizer-combiner" , AMDGPUPreLegalizerCombinerPass()) |
141 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-postlegalizer-combiner" , AMDGPUPostLegalizerCombinerPass()) |
142 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-global-isel-divergence-lowering" , AMDGPUGlobalISelDivergenceLoweringPass()) |
143 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbankselect" , AMDGPURegBankSelectPass()) |
144 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbanklegalize" , AMDGPURegBankLegalizePass()) |
145 | DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbank-combiner" , AMDGPURegBankCombinerPass()) |
146 | |
147 | #undef DUMMY_MACHINE_FUNCTION_PASS |
148 | |