diff options
author | Xiang Li <python3kgae@outlook.com> | 2022-10-04 13:02:49 -0700 |
---|---|---|
committer | Xiang Li <python3kgae@outlook.com> | 2022-10-06 19:34:29 -0700 |
commit | 220185552f4484155b2893a1568f5d71c23a33cf (patch) | |
tree | 46ba1617e60f0526be262e68ab82e1f492b2a444 /llvm/lib/Target/DirectX/DirectXTargetMachine.cpp | |
parent | ac76fa480fce3302743c75798240298ea4dac374 (diff) | |
download | llvm-220185552f4484155b2893a1568f5d71c23a33cf.zip llvm-220185552f4484155b2893a1568f5d71c23a33cf.tar.gz llvm-220185552f4484155b2893a1568f5d71c23a33cf.tar.bz2 |
[DirectX backend] Add analysis to collect DXILResources
Now only DXILTranslateMetadata uses DXILResources, so DXILResourceWrapper is only used by DXILTranslateMetadata.
Once we add lower for createHandle, DXILResourceWrapper will be used in more passes.
Also we can add resource index allocation in DXILResourceWrapper.
Reviewed By: beanz
Differential Revision: https://reviews.llvm.org/D135190
Diffstat (limited to 'llvm/lib/Target/DirectX/DirectXTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/DirectX/DirectXTargetMachine.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index 8ea074cb..81aaf86 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "DirectXTargetMachine.h" +#include "DXILResourceAnalysis.h" #include "DXILWriter/DXILWriterPass.h" #include "DirectX.h" #include "DirectXSubtarget.h" @@ -25,6 +26,7 @@ #include "llvm/MC/MCSectionDXContainer.h" #include "llvm/MC/SectionKind.h" #include "llvm/MC/TargetRegistry.h" +#include "llvm/Passes/PassBuilder.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" @@ -39,6 +41,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXTarget() { initializeEmbedDXILPassPass(*PR); initializeDXILOpLoweringLegacyPass(*PR); initializeDXILTranslateMetadataPass(*PR); + initializeDXILResourceWrapperPass(*PR); } class DXILTargetObjectFile : public TargetLoweringObjectFile { @@ -92,6 +95,22 @@ DirectXTargetMachine::DirectXTargetMachine(const Target &T, const Triple &TT, DirectXTargetMachine::~DirectXTargetMachine() {} +void DirectXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) { + PB.registerPipelineParsingCallback( + [](StringRef PassName, ModulePassManager &PM, + ArrayRef<PassBuilder::PipelineElement>) { + if (PassName == "print-dxil-resource") { + PM.addPass(DXILResourcePrinterPass(dbgs())); + return true; + } + return false; + }); + + PB.registerAnalysisRegistrationCallback([](ModuleAnalysisManager &MAM) { + MAM.registerPass([&] { return DXILResourceAnalysis(); }); + }); +} + bool DirectXTargetMachine::addPassesToEmitFile( PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, bool DisableVerify, |