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