LLVM 24.0.0git
DirectX.h
Go to the documentation of this file.
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
14#include "llvm/IR/Analysis.h"
15#include "llvm/IR/PassManager.h"
17
18namespace llvm {
19namespace dxil {
21} // namespace dxil
22
23class AttributeMask;
24class Function;
25class FunctionPass;
26class Module;
27class ModulePass;
28class PassRegistry;
29class raw_ostream;
30
31/// Initializer for dxil writer pass
33
34/// Initializer for dxil embedder pass
36
37/// Initializer for DXIL-prepare
39
40/// Pass to convert modules into DXIL-compatable modules
42 : public RequiredPassInfoMixin<DXILPrepareModulePass> {
43public:
45};
46
48
49/// Pass to downgrade debug information to forms supported by DXIL.
50class DXILDebugInfoPass : public OptionalPassInfoMixin<DXILDebugInfoPass> {
51public:
53};
54
55/// Initializer for DXIL debug info lowering.
57
59
60/// Pass to expand intrinsic operations that lack DXIL opCodes
62 : public OptionalPassInfoMixin<DXILIntrinsicExpansionPass> {
63public:
65};
66
67/// Initializer for DXIL Intrinsic Expansion
69
71
72/// Pass to translate loads in the cbuffer address space to cbuffer
73/// load intrinsic.
75 : public OptionalPassInfoMixin<DXILCBufferAccessPass> {
76public:
78};
79
80/// Initializer for DXIL CBuffer Access Pass
82
84
85/// Pass to prepare vector data for DXIL by converting vector storage to
86/// scalar arrays and lowering dynamically indexed vector accesses to
87/// array accesses.
89 : public OptionalPassInfoMixin<DXILDataScalarizationPass> {
90public:
92};
93
94/// Initializer for DXIL Data Scalarization Pass
96
98
99/// Pass to flatten arrays into a one dimensional DXIL legal form
101 : public OptionalPassInfoMixin<DXILFlattenArraysPass> {
102public:
104};
105
106/// Initializer for DXIL Array Flatten Pass
108
110
111/// Pass to eliminate redundant stores and loads from handle globals.
113 : public OptionalPassInfoMixin<DXILForwardHandleAccessesPass> {
114public:
116};
117
118/// Initializer for DXIL Forward Handle Accesses Pass
120
122
123/// Pass to rewrite LLVM IR constructs unsupported by DXIL into
124/// compatible forms.
125class DXILLegalizePass : public OptionalPassInfoMixin<DXILLegalizePass> {
126public:
128};
129
130/// Initializer DXIL legalizationPass
132
134
135/// Pass to transform all llvm memory intrinsics to explicit loads and stores.
137 : public OptionalPassInfoMixin<DXILMemIntrinsicsPass> {
138public:
140};
141
142/// Initializer for DXIL Mem Intrinsics.
144
146
147/// Pass to lowering LLVM intrinsic call to DXIL op function call.
148class DXILOpLoweringPass : public OptionalPassInfoMixin<DXILOpLoweringPass> {
149public:
151};
152
153/// Initializer for DXILOpLowering
155
157
158/// Pass to remove unused DXIL resources and associated
159/// global variables.
161 : public OptionalPassInfoMixin<DXILRemoveUnusedResourcesPass> {
162public:
164};
165
166/// Initializer for DXILRemoveUnusedResources
168
170
171/// Pass to replace pointers to DXIL resources with load and store
172/// operations.
174 : public OptionalPassInfoMixin<DXILResourceAccessPass> {
175public:
177};
178
179/// Initializer for DXILResourceAccess
181
183
184/// Pass to assign register slots to resources without binding.
186 : public OptionalPassInfoMixin<DXILResourceImplicitBindingPass> {
187public:
189};
190
191/// Initializer for DXILResourceImplicitBindingLegacyPass
193
195
196/// Pass to emit metadata for DXIL, and to transforms existing LLVM
197/// metadata to its DXIL equivalent.
199 : public OptionalPassInfoMixin<DXILTranslateMetadataPass> {
200public:
202};
203
204/// Initializer for DXILTranslateMetadata.
206
208
209/// Pass to pretty print DXIL metadata into IR
210/// comments when printing assembly output.
212 : public OptionalPassInfoMixin<DXILPrettyPrinterPass> {
213 raw_ostream &OS;
214
215public:
216 explicit DXILPrettyPrinterPass(raw_ostream &OS) : OS(OS) {}
217
219};
220
221ModulePass *createDXILPrettyPrinterLegacyPass(raw_ostream &OS);
222
223/// Initializer for DXILPrettyPrinter.
225
226/// Pass for validating IR after optimizations are applied and before
227/// lowering to DXIL.
229 : public OptionalPassInfoMixin<DXILPostOptimizationValidationPass> {
230public:
232};
233
234/// Initializer for DXILPostOptimizationValidation.
236
238
239/// Initializer for dxil::ShaderFlagsAnalysisWrapper pass.
241
242/// Initializer for dxil::RootSignatureAnalysisWrapper pass.
244
245/// Initializer for dxil::SignatureAnalysisWrapper pass.
247
248/// Initializer for DXILContainerGlobals pass.
250
251/// Pass for generating DXContainer part globals.
253 : public RequiredPassInfoMixin<DXILContainerGlobalsPass> {
254public:
256};
257
259
260/// Initializer for DXILContainerPDB pass.
262
263/// Pass for emitting DirectX PDB files.
265 : public RequiredPassInfoMixin<DXILContainerPDBPass> {
266public:
268};
269
271
272/// Pass to update the linkage of functions to make sure only
273/// shader entry points and exported functions are visible from
274/// the module (have program linkage). All other functions will
275/// be updated to have internal linkage.
277 : public RequiredPassInfoMixin<DXILFinalizeLinkagePass> {
278public:
280};
281
282/// Initializer for DXILFinalizeLinkage pass.
284
286} // namespace llvm
287
288#endif // LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:54
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
This class stores enough information to efficiently remove some attributes from an existing AttrBuild...
Pass to translate loads in the cbuffer address space to cbuffer load intrinsic.
Definition DirectX.h:75
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
Pass for generating DXContainer part globals.
Definition DirectX.h:253
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
Pass for emitting DirectX PDB files.
Definition DirectX.h:265
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
Pass to prepare vector data for DXIL by converting vector storage to scalar arrays and lowering dynam...
Definition DirectX.h:89
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to downgrade debug information to forms supported by DXIL.
Definition DirectX.h:50
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to update the linkage of functions to make sure only shader entry points and exported functions ...
Definition DirectX.h:277
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to flatten arrays into a one dimensional DXIL legal form.
Definition DirectX.h:101
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to eliminate redundant stores and loads from handle globals.
Definition DirectX.h:113
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Pass to expand intrinsic operations that lack DXIL opCodes.
Definition DirectX.h:62
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to rewrite LLVM IR constructs unsupported by DXIL into compatible forms.
Definition DirectX.h:125
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
Pass to transform all llvm memory intrinsics to explicit loads and stores.
Definition DirectX.h:137
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to lowering LLVM intrinsic call to DXIL op function call.
Definition DirectX.h:148
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
Pass for validating IR after optimizations are applied and before lowering to DXIL.
Definition DirectX.h:229
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
Pass to convert modules into DXIL-compatable modules.
Definition DirectX.h:42
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
DXILPrettyPrinterPass(raw_ostream &OS)
Definition DirectX.h:216
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to remove unused DXIL resources and associated global variables.
Definition DirectX.h:161
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Pass to replace pointers to DXIL resources with load and store operations.
Definition DirectX.h:174
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Pass to assign register slots to resources without binding.
Definition DirectX.h:186
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Pass to emit metadata for DXIL, and to transforms existing LLVM metadata to its DXIL equivalent.
Definition DirectX.h:199
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:312
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition Pass.h:253
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
Pass manager infrastructure for declaring and invalidating analyses.
template class LLVM_TEMPLATE_ABI opt< bool >
cl::opt< bool > PdbInPrivate
This is an optimization pass for GlobalISel generic memory operations.
void initializeDXILContainerGlobalsLegacyPass(PassRegistry &)
Initializer for DXILContainerGlobals pass.
void initializeShaderFlagsAnalysisWrapperPass(PassRegistry &)
Initializer for dxil::ShaderFlagsAnalysisWrapper pass.
FunctionPass * createDXILLegalizeLegacyPass()
void initializeDXILPrepareModuleLegacyPass(PassRegistry &)
Initializer for DXIL-prepare.
void initializeDXILPrettyPrinterLegacyPass(PassRegistry &)
Initializer for DXILPrettyPrinter.
ModulePass * createDXILDataScalarizationLegacyPass()
ModulePass * createDXILContainerPDBLegacyPass()
ModulePass * createDXILPostOptimizationValidationLegacyPass()
ModulePass * createDXILTranslateMetadataLegacyPass()
void initializeDXILCBufferAccessLegacyPass(PassRegistry &)
Initializer for DXIL CBuffer Access Pass.
void initializeDXILFlattenArraysLegacyPass(PassRegistry &)
Initializer for DXIL Array Flatten Pass.
void initializeRootSignatureAnalysisWrapperPass(PassRegistry &)
Initializer for dxil::RootSignatureAnalysisWrapper pass.
ModulePass * createDXILDebugInfoLegacyPass()
ModulePass * createDXILCBufferAccessLegacyPass()
ModulePass * createDXILFlattenArraysLegacyPass()
ModulePass * createDXILResourceImplicitBindingLegacyPass()
FunctionPass * createDXILResourceAccessLegacyPass()
void initializeDXILResourceImplicitBindingLegacyPass(PassRegistry &)
Initializer for DXILResourceImplicitBindingLegacyPass.
void initializeDXILForwardHandleAccessesLegacyPass(PassRegistry &)
Initializer for DXIL Forward Handle Accesses Pass.
void initializeDXILDataScalarizationLegacyPass(PassRegistry &)
Initializer for DXIL Data Scalarization Pass.
ModulePass * createDXILFinalizeLinkageLegacyPass()
void initializeEmbedDXILPassPass(PassRegistry &)
Initializer for dxil embedder pass.
void initializeSignatureAnalysisWrapperPass(PassRegistry &)
Initializer for dxil::SignatureAnalysisWrapper pass.
ModulePass * createDXILIntrinsicExpansionLegacyPass()
ModulePass * createDXILPrepareModuleLegacyPass()
void initializeDXILFinalizeLinkageLegacyPass(PassRegistry &)
Initializer for DXILFinalizeLinkage pass.
void initializeDXILContainerPDBLegacyPass(PassRegistry &)
Initializer for DXILContainerPDB pass.
void initializeDXILIntrinsicExpansionLegacyPass(PassRegistry &)
Initializer for DXIL Intrinsic Expansion.
void initializeDXILLegalizeLegacyPass(PassRegistry &)
Initializer DXIL legalizationPass.
FunctionPass * createDXILRemoveUnusedResourcesLegacyPass()
void initializeDXILDebugInfoLegacyPass(PassRegistry &)
Initializer for DXIL debug info lowering.
void initializeDXILMemIntrinsicsLegacyPass(PassRegistry &)
Initializer for DXIL Mem Intrinsics.
ModulePass * createDXILMemIntrinsicsLegacyPass()
ModulePass * createDXILOpLoweringLegacyPass()
void initializeDXILPostOptimizationValidationLegacyPass(PassRegistry &)
Initializer for DXILPostOptimizationValidation.
void initializeDXILOpLoweringLegacyPass(PassRegistry &)
Initializer for DXILOpLowering.
void initializeWriteDXILPassPass(PassRegistry &)
Initializer for dxil writer pass.
ModulePass * createDXILPrettyPrinterLegacyPass(raw_ostream &OS)
void initializeDXILRemoveUnusedResourcesLegacyPass(PassRegistry &)
Initializer for DXILRemoveUnusedResources.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
FunctionPass * createDXILForwardHandleAccessesLegacyPass()
ModulePass * createDXILContainerGlobalsLegacyPass()
void initializeDXILResourceAccessLegacyPass(PassRegistry &)
Initializer for DXILResourceAccess.
void initializeDXILTranslateMetadataLegacyPass(PassRegistry &)
Initializer for DXILTranslateMetadata.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in for passes that can be skipped.
A CRTP mix-in for passes that should not be skipped.