xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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