diff options
Diffstat (limited to 'llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp')
| -rw-r--r-- | llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp index 21089a232783..55b3d9456842 100644 --- a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp +++ b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp @@ -1,13 +1,12 @@ -//===- DXILTranslateMetadata.cpp - Pass to emit DXIL metadata ---*- C++ -*-===// +//===- DXILTranslateMetadata.cpp - Pass to emit DXIL metadata -------------===// // // 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 // //===----------------------------------------------------------------------===// -/// -//===----------------------------------------------------------------------===// +#include "DXILTranslateMetadata.h" #include "DXILMetadata.h" #include "DXILResource.h" #include "DXILResourceAnalysis.h" @@ -23,11 +22,35 @@ using namespace llvm; using namespace llvm::dxil; +static void translateMetadata(Module &M, const dxil::Resources &MDResources, + const ComputedShaderFlags &ShaderFlags) { + dxil::ValidatorVersionMD ValVerMD(M); + if (ValVerMD.isEmpty()) + ValVerMD.update(VersionTuple(1, 0)); + dxil::createShaderModelMD(M); + dxil::createDXILVersionMD(M); + + MDResources.write(M); + + dxil::createEntryMD(M, static_cast<uint64_t>(ShaderFlags)); +} + +PreservedAnalyses DXILTranslateMetadata::run(Module &M, + ModuleAnalysisManager &MAM) { + const dxil::Resources &MDResources = MAM.getResult<DXILResourceMDAnalysis>(M); + const ComputedShaderFlags &ShaderFlags = + MAM.getResult<ShaderFlagsAnalysis>(M); + + translateMetadata(M, MDResources, ShaderFlags); + + return PreservedAnalyses::all(); +} + namespace { -class DXILTranslateMetadata : public ModulePass { +class DXILTranslateMetadataLegacy : public ModulePass { public: static char ID; // Pass identification, replacement for typeid - explicit DXILTranslateMetadata() : ModulePass(ID) {} + explicit DXILTranslateMetadataLegacy() : ModulePass(ID) {} StringRef getPassName() const override { return "DXIL Translate Metadata"; } @@ -37,39 +60,28 @@ public: AU.addRequired<ShaderFlagsAnalysisWrapper>(); } - bool runOnModule(Module &M) override; + bool runOnModule(Module &M) override { + const dxil::Resources &MDResources = + getAnalysis<DXILResourceMDWrapper>().getDXILResource(); + const ComputedShaderFlags &ShaderFlags = + getAnalysis<ShaderFlagsAnalysisWrapper>().getShaderFlags(); + + translateMetadata(M, MDResources, ShaderFlags); + return true; + } }; } // namespace -bool DXILTranslateMetadata::runOnModule(Module &M) { - - dxil::ValidatorVersionMD ValVerMD(M); - if (ValVerMD.isEmpty()) - ValVerMD.update(VersionTuple(1, 0)); - dxil::createShaderModelMD(M); - dxil::createDXILVersionMD(M); - - const dxil::Resources &Res = - getAnalysis<DXILResourceMDWrapper>().getDXILResource(); - Res.write(M); - - const uint64_t Flags = static_cast<uint64_t>( - getAnalysis<ShaderFlagsAnalysisWrapper>().getShaderFlags()); - dxil::createEntryMD(M, Flags); - - return false; -} - -char DXILTranslateMetadata::ID = 0; +char DXILTranslateMetadataLegacy::ID = 0; -ModulePass *llvm::createDXILTranslateMetadataPass() { - return new DXILTranslateMetadata(); +ModulePass *llvm::createDXILTranslateMetadataLegacyPass() { + return new DXILTranslateMetadataLegacy(); } -INITIALIZE_PASS_BEGIN(DXILTranslateMetadata, "dxil-translate-metadata", +INITIALIZE_PASS_BEGIN(DXILTranslateMetadataLegacy, "dxil-translate-metadata", "DXIL Translate Metadata", false, false) INITIALIZE_PASS_DEPENDENCY(DXILResourceMDWrapper) INITIALIZE_PASS_DEPENDENCY(ShaderFlagsAnalysisWrapper) -INITIALIZE_PASS_END(DXILTranslateMetadata, "dxil-translate-metadata", +INITIALIZE_PASS_END(DXILTranslateMetadataLegacy, "dxil-translate-metadata", "DXIL Translate Metadata", false, false) |
