1//===- SPIRVPassRegistry.def - Registry of SPIRV 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// SPIRV backend.
11//
12//===----------------------------------------------------------------------===//
13
14// NOTE: NO INCLUDE GUARD DESIRED!
15
16#ifndef MODULE_ANALYSIS
17#define MODULE_ANALYSIS(NAME, CREATE_PASS)
18#endif
19MODULE_ANALYSIS("spirv-module-analysis", SPIRVModuleAnalysis())
20#undef MODULE_ANALYSIS
21
22#ifndef MODULE_PASS
23#define MODULE_PASS(NAME, CREATE_PASS)
24#endif
25MODULE_PASS("spirv-asm-printer-begin", SPIRVAsmPrinterBeginPass())
26MODULE_PASS("spirv-asm-printer-end", SPIRVAsmPrinterEndPass())
27MODULE_PASS("spirv-cbuffer-access", SPIRVCBufferAccessPass())
28MODULE_PASS("spirv-emit-intrinsics", SPIRVEmitIntrinsicsPass(*static_cast<const SPIRVTargetMachine *>(this)))
29MODULE_PASS("spirv-finalize-shader-linkage", SPIRVFinalizeShaderLinkagePass(*static_cast<const SPIRVTargetMachine *>(this)))
30MODULE_PASS("spirv-legalize-resource-binding", SPIRVLegalizeResourceBindingPass())
31MODULE_PASS("spirv-legalize-zero-size-arrays", SPIRVLegalizeZeroSizeArraysPass(*static_cast<const SPIRVTargetMachine *>(this)))
32MODULE_PASS("spirv-lower-ctor-dtor", SPIRVCtorDtorLoweringPass())
33MODULE_PASS("spirv-prepare-functions", SPIRVPrepareFunctionsPass(*static_cast<const SPIRVTargetMachine *>(this)))
34MODULE_PASS("spirv-prepare-globals", SPIRVPrepareGlobalsPass())
35MODULE_PASS("spirv-pushconstant-access", SPIRVPushConstantAccessPass(*static_cast<const SPIRVTargetMachine *>(this)))
36#undef MODULE_PASS
37
38#ifndef FUNCTION_PASS
39#define FUNCTION_PASS(NAME, CREATE_PASS)
40#endif
41FUNCTION_PASS("spirv-legalize-pointer-cast", SPIRVLegalizePointerCastPass(*static_cast<const SPIRVTargetMachine *>(this)))
42FUNCTION_PASS("spirv-merge-region-exits", SPIRVMergeRegionExitTargetsPass())
43FUNCTION_PASS("spirv-regularizer", SPIRVRegularizerPass())
44FUNCTION_PASS("spirv-structurizer", SPIRVStructurizerPass())
45#undef FUNCTION_PASS
46
47#ifndef FUNCTION_ANALYSIS
48#define FUNCTION_ANALYSIS(NAME, CREATE_PASS)
49#endif
50FUNCTION_ANALYSIS("spirv-convergence-region", SPIRVConvergenceRegionAnalysis())
51#undef FUNCTION_ANALYSIS
52
53#ifndef MACHINE_FUNCTION_PASS
54#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
55#endif
56MACHINE_FUNCTION_PASS("spirv-asm-printer", SPIRVAsmPrinterPass())
57MACHINE_FUNCTION_PASS("spirv-postlegalizer", SPIRVPostLegalizerPass())
58MACHINE_FUNCTION_PASS("spirv-prelegalizer", SPIRVPreLegalizerPass())
59MACHINE_FUNCTION_PASS("spirv-prelegalizer-combiner", SPIRVPreLegalizerCombinerPass())
60#undef MACHINE_FUNCTION_PASS
61