1*0fca6ea1SDimitry Andric//===- AMDGPUPassRegistry.def - Registry of AMDGPU passes -------*- C++ -*-===// 2*0fca6ea1SDimitry Andric// 3*0fca6ea1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0fca6ea1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0fca6ea1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0fca6ea1SDimitry Andric// 7*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 8*0fca6ea1SDimitry Andric// 9*0fca6ea1SDimitry Andric// This file is used as the registry of passes that are part of the 10*0fca6ea1SDimitry Andric// AMDGPU backend. 11*0fca6ea1SDimitry Andric// 12*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 13*0fca6ea1SDimitry Andric 14*0fca6ea1SDimitry Andric// NOTE: NO INCLUDE GUARD DESIRED! 15*0fca6ea1SDimitry Andric 16*0fca6ea1SDimitry Andric#ifndef MODULE_PASS 17*0fca6ea1SDimitry Andric#define MODULE_PASS(NAME, CREATE_PASS) 18*0fca6ea1SDimitry Andric#endif 19*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-always-inline", AMDGPUAlwaysInlinePass()) 20*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-attributor", AMDGPUAttributorPass(*this)) 21*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-lower-buffer-fat-pointers", 22*0fca6ea1SDimitry Andric AMDGPULowerBufferFatPointersPass(*this)) 23*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-lower-ctor-dtor", AMDGPUCtorDtorLoweringPass()) 24*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-lower-module-lds", AMDGPULowerModuleLDSPass(*this)) 25*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-printf-runtime-binding", AMDGPUPrintfRuntimeBindingPass()) 26*0fca6ea1SDimitry AndricMODULE_PASS("amdgpu-unify-metadata", AMDGPUUnifyMetadataPass()) 27*0fca6ea1SDimitry Andric#undef MODULE_PASS 28*0fca6ea1SDimitry Andric 29*0fca6ea1SDimitry Andric#ifndef FUNCTION_PASS 30*0fca6ea1SDimitry Andric#define FUNCTION_PASS(NAME, CREATE_PASS) 31*0fca6ea1SDimitry Andric#endif 32*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-codegenprepare", AMDGPUCodeGenPreparePass(*this)) 33*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-image-intrinsic-opt", 34*0fca6ea1SDimitry Andric AMDGPUImageIntrinsicOptimizerPass(*this)) 35*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-lower-kernel-arguments", 36*0fca6ea1SDimitry Andric AMDGPULowerKernelArgumentsPass(*this)) 37*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-lower-kernel-attributes", 38*0fca6ea1SDimitry Andric AMDGPULowerKernelAttributesPass()) 39*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-simplifylib", AMDGPUSimplifyLibCallsPass()) 40*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-promote-alloca", AMDGPUPromoteAllocaPass(*this)) 41*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-promote-alloca-to-vector", 42*0fca6ea1SDimitry Andric AMDGPUPromoteAllocaToVectorPass(*this)) 43*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-promote-kernel-arguments", 44*0fca6ea1SDimitry Andric AMDGPUPromoteKernelArgumentsPass()) 45*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-rewrite-undef-for-phi", AMDGPURewriteUndefForPHIPass()) 46*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-unify-divergent-exit-nodes", 47*0fca6ea1SDimitry Andric AMDGPUUnifyDivergentExitNodesPass()) 48*0fca6ea1SDimitry AndricFUNCTION_PASS("amdgpu-usenative", AMDGPUUseNativeCallsPass()) 49*0fca6ea1SDimitry Andric#undef FUNCTION_PASS 50*0fca6ea1SDimitry Andric 51*0fca6ea1SDimitry Andric#ifndef FUNCTION_ANALYSIS 52*0fca6ea1SDimitry Andric#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) 53*0fca6ea1SDimitry Andric#endif 54*0fca6ea1SDimitry Andric 55*0fca6ea1SDimitry Andric#ifndef FUNCTION_ALIAS_ANALYSIS 56*0fca6ea1SDimitry Andric#define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS) \ 57*0fca6ea1SDimitry Andric FUNCTION_ANALYSIS(NAME, CREATE_PASS) 58*0fca6ea1SDimitry Andric#endif 59*0fca6ea1SDimitry AndricFUNCTION_ALIAS_ANALYSIS("amdgpu-aa", AMDGPUAA()) 60*0fca6ea1SDimitry Andric#undef FUNCTION_ALIAS_ANALYSIS 61*0fca6ea1SDimitry Andric#undef FUNCTION_ANALYSIS 62*0fca6ea1SDimitry Andric 63*0fca6ea1SDimitry Andric#ifndef FUNCTION_PASS_WITH_PARAMS 64*0fca6ea1SDimitry Andric#define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) 65*0fca6ea1SDimitry Andric#endif 66*0fca6ea1SDimitry AndricFUNCTION_PASS_WITH_PARAMS( 67*0fca6ea1SDimitry Andric "amdgpu-atomic-optimizer", 68*0fca6ea1SDimitry Andric "AMDGPUAtomicOptimizerPass", 69*0fca6ea1SDimitry Andric [=](ScanOptions Strategy) { 70*0fca6ea1SDimitry Andric return AMDGPUAtomicOptimizerPass(*this, Strategy); 71*0fca6ea1SDimitry Andric }, 72*0fca6ea1SDimitry Andric parseAMDGPUAtomicOptimizerStrategy, "strategy=dpp|iterative|none") 73*0fca6ea1SDimitry Andric#undef FUNCTION_PASS_WITH_PARAMS 74*0fca6ea1SDimitry Andric 75*0fca6ea1SDimitry Andric#ifndef MACHINE_FUNCTION_PASS 76*0fca6ea1SDimitry Andric#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) 77*0fca6ea1SDimitry Andric#endif 78*0fca6ea1SDimitry AndricMACHINE_FUNCTION_PASS("amdgpu-isel", AMDGPUISelDAGToDAGPass(*this)) 79*0fca6ea1SDimitry Andric#undef MACHINE_FUNCTION_PASS 80