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