This change adds a pass to scalarize vectors in global scope into arrays. There are three distinct parts 1. find the globals that need to be updated and define what the new type should be 2. initialize that new type and copy over all the right attributes over from the old type. 3. Use the instruction visitor pattern to update the loads, stores, and geps for the layout of the new data structure. resolves https://github.com/llvm/llvm-project/issues/107920
82 lines
2.7 KiB
C++
82 lines
2.7 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 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 Data Scalarization Pass
|
|
void initializeDXILDataScalarizationLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to scalarize llvm global data into a DXIL legal form
|
|
ModulePass *createDXILDataScalarizationLegacyPass();
|
|
|
|
/// Initializer for DXILOpLowering
|
|
void initializeDXILOpLoweringLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to lowering LLVM intrinsic call to DXIL op function call.
|
|
ModulePass *createDXILOpLoweringLegacyPass();
|
|
|
|
/// Initializer for DXILTranslateMetadata.
|
|
void initializeDXILTranslateMetadataLegacyPass(PassRegistry &);
|
|
|
|
/// Pass to emit metadata for DXIL.
|
|
ModulePass *createDXILTranslateMetadataLegacyPass();
|
|
|
|
/// Initializer for DXILTranslateMetadata.
|
|
void initializeDXILResourceMDWrapperPass(PassRegistry &);
|
|
|
|
/// Pass to pretty print DXIL metadata.
|
|
ModulePass *createDXILPrettyPrinterLegacyPass(raw_ostream &OS);
|
|
|
|
/// Initializer for DXILPrettyPrinter.
|
|
void initializeDXILPrettyPrinterLegacyPass(PassRegistry &);
|
|
|
|
/// Initializer for dxil::ShaderFlagsAnalysisWrapper pass.
|
|
void initializeShaderFlagsAnalysisWrapperPass(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
|