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-export-kernel-runtime-handles", AMDGPUExportKernelRuntimeHandlesPass()) 21MODULE_PASS("amdgpu-lower-buffer-fat-pointers", 22 AMDGPULowerBufferFatPointersPass(*this)) 23MODULE_PASS("amdgpu-lower-ctor-dtor", AMDGPUCtorDtorLoweringPass()) 24MODULE_PASS("amdgpu-lower-module-lds", AMDGPULowerModuleLDSPass(*this)) 25MODULE_PASS("amdgpu-perf-hint", 26 AMDGPUPerfHintAnalysisPass( 27 *static_cast<const GCNTargetMachine *>(this))) 28MODULE_PASS("amdgpu-preload-kernel-arguments", AMDGPUPreloadKernelArgumentsPass(*this)) 29MODULE_PASS("amdgpu-printf-runtime-binding", AMDGPUPrintfRuntimeBindingPass()) 30MODULE_PASS("amdgpu-remove-incompatible-functions", AMDGPURemoveIncompatibleFunctionsPass(*this)) 31MODULE_PASS("amdgpu-sw-lower-lds", AMDGPUSwLowerLDSPass(*this)) 32MODULE_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 38MODULE_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 49FUNCTION_PASS("amdgpu-annotate-uniform", AMDGPUAnnotateUniformValuesPass()) 50FUNCTION_PASS("amdgpu-codegenprepare", AMDGPUCodeGenPreparePass(*this)) 51FUNCTION_PASS("amdgpu-image-intrinsic-opt", 52 AMDGPUImageIntrinsicOptimizerPass(*this)) 53FUNCTION_PASS("amdgpu-late-codegenprepare", 54 AMDGPULateCodeGenPreparePass( 55 *static_cast<const GCNTargetMachine *>(this))) 56FUNCTION_PASS("amdgpu-lower-kernel-arguments", 57 AMDGPULowerKernelArgumentsPass(*this)) 58FUNCTION_PASS("amdgpu-lower-kernel-attributes", 59 AMDGPULowerKernelAttributesPass()) 60FUNCTION_PASS("amdgpu-promote-alloca", AMDGPUPromoteAllocaPass(*this)) 61FUNCTION_PASS("amdgpu-promote-alloca-to-vector", 62 AMDGPUPromoteAllocaToVectorPass(*this)) 63FUNCTION_PASS("amdgpu-promote-kernel-arguments", 64 AMDGPUPromoteKernelArgumentsPass()) 65FUNCTION_PASS("amdgpu-rewrite-undef-for-phi", AMDGPURewriteUndefForPHIPass()) 66FUNCTION_PASS("amdgpu-simplifylib", AMDGPUSimplifyLibCallsPass()) 67FUNCTION_PASS("amdgpu-unify-divergent-exit-nodes", 68 AMDGPUUnifyDivergentExitNodesPass()) 69FUNCTION_PASS("amdgpu-usenative", AMDGPUUseNativeCallsPass()) 70FUNCTION_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 81FUNCTION_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 88FUNCTION_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_ANALYSIS 98#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS) 99#endif 100 101MACHINE_FUNCTION_ANALYSIS("amdgpu-resource-usage", AMDGPUResourceUsageAnalysis(*static_cast<const GCNTargetMachine *>(this))) 102#undef MACHINE_FUNCTION_ANALYSIS 103 104#ifndef MACHINE_FUNCTION_PASS 105#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) 106#endif 107MACHINE_FUNCTION_PASS("amdgpu-insert-delay-alu", AMDGPUInsertDelayAluPass()) 108MACHINE_FUNCTION_PASS("amdgpu-isel", AMDGPUISelDAGToDAGPass(*this)) 109MACHINE_FUNCTION_PASS("amdgpu-mark-last-scratch-load", AMDGPUMarkLastScratchLoadPass()) 110MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass()) 111MACHINE_FUNCTION_PASS("amdgpu-reserve-wwm-regs", AMDGPUReserveWWMRegsPass()) 112MACHINE_FUNCTION_PASS("amdgpu-rewrite-agpr-copy-mfma", AMDGPURewriteAGPRCopyMFMAPass()) 113MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass()) 114MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority", AMDGPUSetWavePriorityPass()) 115MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass()) 116MACHINE_FUNCTION_PASS("amdgpu-preload-kern-arg-prolog", AMDGPUPreloadKernArgPrologPass()) 117MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass()) 118MACHINE_FUNCTION_PASS("amdgpu-wait-sgpr-hazards", AMDGPUWaitSGPRHazardsPass()) 119MACHINE_FUNCTION_PASS("gcn-create-vopd", GCNCreateVOPDPass()) 120MACHINE_FUNCTION_PASS("gcn-dpp-combine", GCNDPPCombinePass()) 121MACHINE_FUNCTION_PASS("si-fix-sgpr-copies", SIFixSGPRCopiesPass()) 122MACHINE_FUNCTION_PASS("si-fix-vgpr-copies", SIFixVGPRCopiesPass()) 123MACHINE_FUNCTION_PASS("si-fold-operands", SIFoldOperandsPass()); 124MACHINE_FUNCTION_PASS("si-form-memory-clauses", SIFormMemoryClausesPass()) 125MACHINE_FUNCTION_PASS("si-i1-copies", SILowerI1CopiesPass()) 126MACHINE_FUNCTION_PASS("si-insert-hard-clauses", SIInsertHardClausesPass()) 127MACHINE_FUNCTION_PASS("si-insert-waitcnts", SIInsertWaitcntsPass()) 128MACHINE_FUNCTION_PASS("si-late-branch-lowering", SILateBranchLoweringPass()) 129MACHINE_FUNCTION_PASS("si-load-store-opt", SILoadStoreOptimizerPass()) 130MACHINE_FUNCTION_PASS("si-lower-control-flow", SILowerControlFlowPass()) 131MACHINE_FUNCTION_PASS("si-lower-sgpr-spills", SILowerSGPRSpillsPass()) 132MACHINE_FUNCTION_PASS("si-lower-wwm-copies", SILowerWWMCopiesPass()) 133MACHINE_FUNCTION_PASS("si-memory-legalizer", SIMemoryLegalizerPass()) 134MACHINE_FUNCTION_PASS("si-mode-register", SIModeRegisterPass()) 135MACHINE_FUNCTION_PASS("si-opt-vgpr-liverange", SIOptimizeVGPRLiveRangePass()) 136MACHINE_FUNCTION_PASS("si-optimize-exec-masking", SIOptimizeExecMaskingPass()) 137MACHINE_FUNCTION_PASS("si-optimize-exec-masking-pre-ra", SIOptimizeExecMaskingPreRAPass()) 138MACHINE_FUNCTION_PASS("si-peephole-sdwa", SIPeepholeSDWAPass()) 139MACHINE_FUNCTION_PASS("si-post-ra-bundler", SIPostRABundlerPass()) 140MACHINE_FUNCTION_PASS("si-pre-allocate-wwm-regs", SIPreAllocateWWMRegsPass()) 141MACHINE_FUNCTION_PASS("si-pre-emit-peephole", SIPreEmitPeepholePass()) 142MACHINE_FUNCTION_PASS("si-shrink-instructions", SIShrinkInstructionsPass()) 143MACHINE_FUNCTION_PASS("si-wqm", SIWholeQuadModePass()) 144#undef MACHINE_FUNCTION_PASS 145 146#define DUMMY_MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) 147// Global ISel passes 148DUMMY_MACHINE_FUNCTION_PASS("amdgpu-prelegalizer-combiner", AMDGPUPreLegalizerCombinerPass()) 149DUMMY_MACHINE_FUNCTION_PASS("amdgpu-postlegalizer-combiner", AMDGPUPostLegalizerCombinerPass()) 150DUMMY_MACHINE_FUNCTION_PASS("amdgpu-global-isel-divergence-lowering", AMDGPUGlobalISelDivergenceLoweringPass()) 151DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbankselect", AMDGPURegBankSelectPass()) 152DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbanklegalize", AMDGPURegBankLegalizePass()) 153DUMMY_MACHINE_FUNCTION_PASS("amdgpu-regbank-combiner", AMDGPURegBankCombinerPass()) 154 155#undef DUMMY_MACHINE_FUNCTION_PASS 156