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