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