This introduces the DXILMemIntrinsics pass and moves memset and memcpy handling from DXILLegalize to here. We need to do this so that we can handle memory intrinsics before the DXILResourceAccess pass so that we can properly deal with arrays and large structures in resources.
132 lines
4.6 KiB
C++
132 lines
4.6 KiB
C++
//===- DirectXTargetMachine.h - DirectX Target Implementation ---*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
|
|
#define LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
|
|
|
|
namespace llvm {
|
|
class FunctionPass;
|
|
class ModulePass;
|
|
class PassRegistry;
|
|
class raw_ostream;
|
|
|
|
/// Initializer for dxil writer pass
|
|
void initializeWriteDXILPassPass(PassRegistry &);
|
|
|
|
/// Initializer for dxil embedder pass
|
|
void initializeEmbedDXILPassPass(PassRegistry &);
|
|
|
|
/// Initializer for DXIL-prepare
|
|
void initializeDXILPrepareModulePass(PassRegistry &);
|
|
|
|
/// Pass to convert modules into DXIL-compatable modules
|
|
ModulePass *createDXILPrepareModulePass();
|
|
|
|
/// Initializer for DXIL Intrinsic Expansion
|
|
void initializeDXILIntrinsicExpansionLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to expand intrinsic operations that lack DXIL opCodes
|
|
ModulePass *createDXILIntrinsicExpansionLegacyPass();
|
|
|
|
/// Initializer for DXIL CBuffer Access Pass
|
|
void initializeDXILCBufferAccessLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to translate loads in the cbuffer address space to intrinsics
|
|
ModulePass *createDXILCBufferAccessLegacyPass();
|
|
|
|
/// Initializer for DXIL Data Scalarization Pass
|
|
void initializeDXILDataScalarizationLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to scalarize llvm global data into a DXIL legal form
|
|
ModulePass *createDXILDataScalarizationLegacyPass();
|
|
|
|
/// Initializer for DXIL Array Flatten Pass
|
|
void initializeDXILFlattenArraysLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to flatten arrays into a one dimensional DXIL legal form
|
|
ModulePass *createDXILFlattenArraysLegacyPass();
|
|
|
|
/// Initializer for DXIL Forward Handle Accesses Pass
|
|
void initializeDXILForwardHandleAccessesLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to eliminate redundant stores and loads from handle globals.
|
|
FunctionPass *createDXILForwardHandleAccessesLegacyPass();
|
|
|
|
/// Initializer DXIL legalizationPass
|
|
void initializeDXILLegalizeLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to Legalize DXIL by remove i8 truncations and i64 insert/extract
|
|
/// elements
|
|
FunctionPass *createDXILLegalizeLegacyPass();
|
|
|
|
/// Initializer for DXIL Mem Intrinsics.
|
|
void initializeDXILMemIntrinsicsLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to transform all llvm memory intrinsics to explicit loads and stores.
|
|
ModulePass *createDXILMemIntrinsicsLegacyPass();
|
|
|
|
/// Initializer for DXILOpLowering
|
|
void initializeDXILOpLoweringLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to lowering LLVM intrinsic call to DXIL op function call.
|
|
ModulePass *createDXILOpLoweringLegacyPass();
|
|
|
|
/// Initializer for DXILResourceAccess
|
|
void initializeDXILResourceAccessLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to update resource accesses to use load/store directly.
|
|
FunctionPass *createDXILResourceAccessLegacyPass();
|
|
|
|
/// Initializer for DXILResourceImplicitBindingLegacyPass
|
|
void initializeDXILResourceImplicitBindingLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to assign register slots to resources without binding.
|
|
ModulePass *createDXILResourceImplicitBindingLegacyPass();
|
|
|
|
/// Initializer for DXILTranslateMetadata.
|
|
void initializeDXILTranslateMetadataLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to emit metadata for DXIL.
|
|
ModulePass *createDXILTranslateMetadataLegacyPass();
|
|
|
|
/// Pass to pretty print DXIL metadata.
|
|
ModulePass *createDXILPrettyPrinterLegacyPass(raw_ostream &OS);
|
|
|
|
/// Initializer for DXILPrettyPrinter.
|
|
void initializeDXILPrettyPrinterLegacyPass(PassRegistry &);
|
|
|
|
/// Initializer for DXILPostOptimizationValidation.
|
|
void initializeDXILPostOptimizationValidationLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to lowering LLVM intrinsic call to DXIL op function call.
|
|
ModulePass *createDXILPostOptimizationValidationLegacyPass();
|
|
|
|
/// Initializer for dxil::ShaderFlagsAnalysisWrapper pass.
|
|
void initializeShaderFlagsAnalysisWrapperPass(PassRegistry &);
|
|
|
|
/// Initializer for dxil::RootSignatureAnalysisWrapper pass.
|
|
void initializeRootSignatureAnalysisWrapperPass(PassRegistry &);
|
|
|
|
/// Initializer for DXContainerGlobals pass.
|
|
void initializeDXContainerGlobalsPass(PassRegistry &);
|
|
|
|
/// Pass for generating DXContainer part globals.
|
|
ModulePass *createDXContainerGlobalsPass();
|
|
|
|
/// Initializer for DXILFinalizeLinkage pass.
|
|
void initializeDXILFinalizeLinkageLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to finalize linkage of functions.
|
|
ModulePass *createDXILFinalizeLinkageLegacyPass();
|
|
|
|
} // namespace llvm
|
|
|
|
#endif // LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
|