1//===- DirectXTargetMachine.h - DirectX Target Implementation ---*- 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//===----------------------------------------------------------------------===//
10
11#ifndef LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
12#define LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
13
14namespace llvm {
15class AttributeMask;
16class FunctionPass;
17class ModulePass;
18class PassRegistry;
19class raw_ostream;
20
21/// Initializer for dxil writer pass
22void initializeWriteDXILPassPass(PassRegistry &);
23
24/// Initializer for dxil embedder pass
25void initializeEmbedDXILPassPass(PassRegistry &);
26
27/// Initializer for DXIL-prepare
28void initializeDXILPrepareModulePass(PassRegistry &);
29
30/// Pass to convert modules into DXIL-compatable modules
31ModulePass *createDXILPrepareModulePass();
32
33/// Initializer for DXIL debug info lowering.
34void initializeDXILDebugInfoLegacyPass(PassRegistry &);
35
36/// Pass to downgrade debug information to forms supported by DXIL.
37ModulePass *createDXILDebugInfoLegacyPass();
38
39/// Initializer for DXIL Intrinsic Expansion
40void initializeDXILIntrinsicExpansionLegacyPass(PassRegistry &);
41
42/// Pass to expand intrinsic operations that lack DXIL opCodes
43ModulePass *createDXILIntrinsicExpansionLegacyPass();
44
45/// Initializer for DXIL CBuffer Access Pass
46void initializeDXILCBufferAccessLegacyPass(PassRegistry &);
47
48/// Pass to translate loads in the cbuffer address space to intrinsics
49ModulePass *createDXILCBufferAccessLegacyPass();
50
51/// Initializer for DXIL Data Scalarization Pass
52void initializeDXILDataScalarizationLegacyPass(PassRegistry &);
53
54/// Pass to scalarize llvm global data into a DXIL legal form
55ModulePass *createDXILDataScalarizationLegacyPass();
56
57/// Initializer for DXIL Array Flatten Pass
58void initializeDXILFlattenArraysLegacyPass(PassRegistry &);
59
60/// Pass to flatten arrays into a one dimensional DXIL legal form
61ModulePass *createDXILFlattenArraysLegacyPass();
62
63/// Initializer for DXIL Forward Handle Accesses Pass
64void initializeDXILForwardHandleAccessesLegacyPass(PassRegistry &);
65
66/// Pass to eliminate redundant stores and loads from handle globals.
67FunctionPass *createDXILForwardHandleAccessesLegacyPass();
68
69/// Initializer DXIL legalizationPass
70void initializeDXILLegalizeLegacyPass(PassRegistry &);
71
72/// Pass to Legalize DXIL by remove i8 truncations and i64 insert/extract
73/// elements
74FunctionPass *createDXILLegalizeLegacyPass();
75
76/// Initializer for DXIL Mem Intrinsics.
77void initializeDXILMemIntrinsicsLegacyPass(PassRegistry &);
78
79/// Pass to transform all llvm memory intrinsics to explicit loads and stores.
80ModulePass *createDXILMemIntrinsicsLegacyPass();
81
82/// Initializer for DXILOpLowering
83void initializeDXILOpLoweringLegacyPass(PassRegistry &);
84
85/// Pass to lowering LLVM intrinsic call to DXIL op function call.
86ModulePass *createDXILOpLoweringLegacyPass();
87
88/// Initializer for DXILRemoveUnusedResources
89void initializeDXILRemoveUnusedResourcesLegacyPass(PassRegistry &);
90
91/// Pass to update remove unsused resources.
92FunctionPass *createDXILRemoveUnusedResourcesLegacyPass();
93
94/// Initializer for DXILResourceAccess
95void initializeDXILResourceAccessLegacyPass(PassRegistry &);
96
97/// Pass to update resource accesses to use load/store directly.
98FunctionPass *createDXILResourceAccessLegacyPass();
99
100/// Initializer for DXILResourceImplicitBindingLegacyPass
101void initializeDXILResourceImplicitBindingLegacyPass(PassRegistry &);
102
103/// Pass to assign register slots to resources without binding.
104ModulePass *createDXILResourceImplicitBindingLegacyPass();
105
106/// Initializer for DXILTranslateMetadata.
107void initializeDXILTranslateMetadataLegacyPass(PassRegistry &);
108
109/// Pass to emit metadata for DXIL.
110ModulePass *createDXILTranslateMetadataLegacyPass();
111
112/// Pass to pretty print DXIL metadata.
113ModulePass *createDXILPrettyPrinterLegacyPass(raw_ostream &OS);
114
115/// Initializer for DXILPrettyPrinter.
116void initializeDXILPrettyPrinterLegacyPass(PassRegistry &);
117
118/// Initializer for DXILPostOptimizationValidation.
119void initializeDXILPostOptimizationValidationLegacyPass(PassRegistry &);
120
121/// Pass to lowering LLVM intrinsic call to DXIL op function call.
122ModulePass *createDXILPostOptimizationValidationLegacyPass();
123
124/// Initializer for dxil::ShaderFlagsAnalysisWrapper pass.
125void initializeShaderFlagsAnalysisWrapperPass(PassRegistry &);
126
127/// Initializer for dxil::RootSignatureAnalysisWrapper pass.
128void initializeRootSignatureAnalysisWrapperPass(PassRegistry &);
129
130/// Initializer for DXContainerGlobals pass.
131void initializeDXContainerGlobalsPass(PassRegistry &);
132
133/// Pass for generating DXContainer part globals.
134ModulePass *createDXContainerGlobalsPass();
135
136/// Initializer for DXContainerPDB pass.
137void initializeDXContainerPDBPass(PassRegistry &);
138
139/// Pass for emitting DirectX PDB files.
140ModulePass *createDXContainerPDBPass();
141
142/// Initializer for DXILFinalizeLinkage pass.
143void initializeDXILFinalizeLinkageLegacyPass(PassRegistry &);
144
145/// Pass to finalize linkage of functions.
146ModulePass *createDXILFinalizeLinkageLegacyPass();
147} // namespace llvm
148
149#endif // LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
150