aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
diff options
context:
space:
mode:
authorXiang Li <python3kgae@outlook.com>2022-10-04 13:02:49 -0700
committerXiang Li <python3kgae@outlook.com>2022-10-06 19:34:29 -0700
commit220185552f4484155b2893a1568f5d71c23a33cf (patch)
tree46ba1617e60f0526be262e68ab82e1f492b2a444 /llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
parentac76fa480fce3302743c75798240298ea4dac374 (diff)
downloadllvm-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.cpp19
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,