From 0e8828c291d6e7e35ed3c0bce0504d8f731f9667 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 26 Jun 2025 19:28:01 +0000 Subject: [PATCH 01/10] refactoring --- .../lib/Target/DirectX/DXContainerGlobals.cpp | 2 +- llvm/lib/Target/DirectX/DXILRootSignature.cpp | 12 ++--- llvm/lib/Target/DirectX/DXILRootSignature.h | 45 ++++++++++++++----- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp index 9c38901f6821f..83f787da66403 100644 --- a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp +++ b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp @@ -160,7 +160,7 @@ void DXContainerGlobals::addRootSignature(Module &M, assert(MMI.EntryPropertyVec.size() == 1); - auto &RSA = getAnalysis(); + auto &RSA = getAnalysis().getRSInfo(); const Function *EntryFunction = MMI.EntryPropertyVec[0].Entry; const auto &FuncRs = RSA.find(EntryFunction); diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.cpp b/llvm/lib/Target/DirectX/DXILRootSignature.cpp index 29e78fcce5262..4094df160ef6f 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.cpp +++ b/llvm/lib/Target/DirectX/DXILRootSignature.cpp @@ -554,9 +554,9 @@ analyzeModule(Module &M) { AnalysisKey RootSignatureAnalysis::Key; -SmallDenseMap -RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) { - return analyzeModule(M); +RootSignatureBindingInfo RootSignatureAnalysis::run(Module &M, + ModuleAnalysisManager &AM) { + return RootSignatureBindingInfo(analyzeModule(M)); } //===----------------------------------------------------------------------===// @@ -564,8 +564,7 @@ RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) { PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M, ModuleAnalysisManager &AM) { - SmallDenseMap &RSDMap = - AM.getResult(M); + RootSignatureBindingInfo &RSDMap = AM.getResult(M); OS << "Root Signature Definitions" << "\n"; @@ -636,7 +635,8 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M, //===----------------------------------------------------------------------===// bool RootSignatureAnalysisWrapper::runOnModule(Module &M) { - FuncToRsMap = analyzeModule(M); + FuncToRsMap = std::make_unique( + RootSignatureBindingInfo(analyzeModule(M))); return false; } diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index b45cebc15fd39..fef933811f840 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -33,16 +33,43 @@ enum class RootSignatureElementKind { CBV = 5, DescriptorTable = 6, }; + +class RootSignatureBindingInfo { + private: + SmallDenseMap FuncToRsMap; + + public: + using iterator = + SmallDenseMap::iterator; + + RootSignatureBindingInfo () = default; + RootSignatureBindingInfo(SmallDenseMap Map) : FuncToRsMap(Map) {}; + + iterator find(const Function *F) { return FuncToRsMap.find(F); } + + iterator end() { return FuncToRsMap.end(); } + + std::optional getDescForFunction(const Function* F) { + const auto FuncRs = find(F); + if (FuncRs == end()) + return std::nullopt; + + return FuncRs->second; + } + +}; + class RootSignatureAnalysis : public AnalysisInfoMixin { friend AnalysisInfoMixin; static AnalysisKey Key; public: - RootSignatureAnalysis() = default; - using Result = SmallDenseMap; +RootSignatureAnalysis() = default; - SmallDenseMap + using Result = RootSignatureBindingInfo; + + RootSignatureBindingInfo run(Module &M, ModuleAnalysisManager &AM); }; @@ -52,20 +79,16 @@ class RootSignatureAnalysis : public AnalysisInfoMixin { /// passes which run through the legacy pass manager. class RootSignatureAnalysisWrapper : public ModulePass { private: - SmallDenseMap FuncToRsMap; + std::unique_ptr FuncToRsMap; public: static char ID; + using Result = RootSignatureBindingInfo; RootSignatureAnalysisWrapper() : ModulePass(ID) {} - using iterator = - SmallDenseMap::iterator; - - iterator find(const Function *F) { return FuncToRsMap.find(F); } - - iterator end() { return FuncToRsMap.end(); } - + RootSignatureBindingInfo& getRSInfo() {return *FuncToRsMap;} + bool runOnModule(Module &M) override; void getAnalysisUsage(AnalysisUsage &AU) const override; From 2edd215e118e9dc947b1a6d2bc52bb8b6c78e3b2 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Thu, 26 Jun 2025 19:28:01 +0000 Subject: [PATCH 02/10] refactoring --- llvm/lib/Target/DirectX/DXContainerGlobals.cpp | 7 +++---- llvm/lib/Target/DirectX/DXILRootSignature.cpp | 12 +++++++++--- llvm/lib/Target/DirectX/DXILRootSignature.h | 10 +++++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp index 83f787da66403..6c8ae8eaaea77 100644 --- a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp +++ b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp @@ -162,16 +162,15 @@ void DXContainerGlobals::addRootSignature(Module &M, auto &RSA = getAnalysis().getRSInfo(); const Function *EntryFunction = MMI.EntryPropertyVec[0].Entry; - const auto &FuncRs = RSA.find(EntryFunction); + const auto &RS = RSA.getDescForFunction(EntryFunction); - if (FuncRs == RSA.end()) + if (!RS) return; - const RootSignatureDesc &RS = FuncRs->second; SmallString<256> Data; raw_svector_ostream OS(Data); - RS.write(OS); + RS->write(OS); Constant *Constant = ConstantDataArray::getString(M.getContext(), Data, /*AddNull*/ false); diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.cpp b/llvm/lib/Target/DirectX/DXILRootSignature.cpp index 4094df160ef6f..12b0f0b74837a 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.cpp +++ b/llvm/lib/Target/DirectX/DXILRootSignature.cpp @@ -28,6 +28,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" #include +#include #include #include @@ -554,9 +555,12 @@ analyzeModule(Module &M) { AnalysisKey RootSignatureAnalysis::Key; -RootSignatureBindingInfo RootSignatureAnalysis::run(Module &M, - ModuleAnalysisManager &AM) { - return RootSignatureBindingInfo(analyzeModule(M)); +RootSignatureAnalysis::Result +RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) { + if (!AnalysisResult) + AnalysisResult = std::make_unique( + RootSignatureBindingInfo(analyzeModule(M))); + return *AnalysisResult; } //===----------------------------------------------------------------------===// @@ -635,6 +639,8 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M, //===----------------------------------------------------------------------===// bool RootSignatureAnalysisWrapper::runOnModule(Module &M) { + if (HasRun) + return false; FuncToRsMap = std::make_unique( RootSignatureBindingInfo(analyzeModule(M))); return false; diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index fef933811f840..c143d45a13d88 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -19,6 +19,7 @@ #include "llvm/IR/PassManager.h" #include "llvm/MC/DXContainerRootSignature.h" #include "llvm/Pass.h" +#include #include namespace llvm { @@ -68,9 +69,11 @@ class RootSignatureAnalysis : public AnalysisInfoMixin { RootSignatureAnalysis() = default; using Result = RootSignatureBindingInfo; - - RootSignatureBindingInfo - run(Module &M, ModuleAnalysisManager &AM); + + Result run(Module &M, ModuleAnalysisManager &AM); + +private: + std::unique_ptr AnalysisResult; }; /// Wrapper pass for the legacy pass manager. @@ -80,6 +83,7 @@ RootSignatureAnalysis() = default; class RootSignatureAnalysisWrapper : public ModulePass { private: std::unique_ptr FuncToRsMap; + bool HasRun = false; public: static char ID; From 242545e5f40ccbf698e7f6935d8d9efa86cf5cb4 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 2 Jul 2025 21:10:21 +0000 Subject: [PATCH 03/10] clean up --- llvm/lib/Target/DirectX/DXILRootSignature.cpp | 8 +++----- llvm/lib/Target/DirectX/DXILRootSignature.h | 2 -- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.cpp b/llvm/lib/Target/DirectX/DXILRootSignature.cpp index 12b0f0b74837a..5a53ea8a3631b 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.cpp +++ b/llvm/lib/Target/DirectX/DXILRootSignature.cpp @@ -28,7 +28,6 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" #include -#include #include #include @@ -639,10 +638,9 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M, //===----------------------------------------------------------------------===// bool RootSignatureAnalysisWrapper::runOnModule(Module &M) { - if (HasRun) - return false; - FuncToRsMap = std::make_unique( - RootSignatureBindingInfo(analyzeModule(M))); + if (!FuncToRsMap) + FuncToRsMap = std::make_unique( + RootSignatureBindingInfo(analyzeModule(M))); return false; } diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index c143d45a13d88..8a057404e01c1 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -19,7 +19,6 @@ #include "llvm/IR/PassManager.h" #include "llvm/MC/DXContainerRootSignature.h" #include "llvm/Pass.h" -#include #include namespace llvm { @@ -83,7 +82,6 @@ RootSignatureAnalysis() = default; class RootSignatureAnalysisWrapper : public ModulePass { private: std::unique_ptr FuncToRsMap; - bool HasRun = false; public: static char ID; From 3f8dec410b55a610f41cec9d7b38c15c52f82837 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 2 Jul 2025 21:22:55 +0000 Subject: [PATCH 04/10] format --- llvm/lib/Target/DirectX/DXILRootSignature.h | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index 8a057404e01c1..60ae7c0a6b2b1 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -35,28 +35,30 @@ enum class RootSignatureElementKind { }; class RootSignatureBindingInfo { - private: - SmallDenseMap FuncToRsMap; +private: + SmallDenseMap FuncToRsMap; - public: +public: using iterator = - SmallDenseMap::iterator; + SmallDenseMap::iterator; - RootSignatureBindingInfo () = default; - RootSignatureBindingInfo(SmallDenseMap Map) : FuncToRsMap(Map) {}; + RootSignatureBindingInfo() = default; + RootSignatureBindingInfo( + SmallDenseMap Map) + : FuncToRsMap(Map){}; iterator find(const Function *F) { return FuncToRsMap.find(F); } iterator end() { return FuncToRsMap.end(); } - std::optional getDescForFunction(const Function* F) { + std::optional + getDescForFunction(const Function *F) { const auto FuncRs = find(F); if (FuncRs == end()) return std::nullopt; return FuncRs->second; } - }; class RootSignatureAnalysis : public AnalysisInfoMixin { @@ -64,8 +66,7 @@ class RootSignatureAnalysis : public AnalysisInfoMixin { static AnalysisKey Key; public: - -RootSignatureAnalysis() = default; + RootSignatureAnalysis() = default; using Result = RootSignatureBindingInfo; @@ -89,8 +90,8 @@ class RootSignatureAnalysisWrapper : public ModulePass { RootSignatureAnalysisWrapper() : ModulePass(ID) {} - RootSignatureBindingInfo& getRSInfo() {return *FuncToRsMap;} - + RootSignatureBindingInfo &getRSInfo() { return *FuncToRsMap; } + bool runOnModule(Module &M) override; void getAnalysisUsage(AnalysisUsage &AU) const override; From 3b1ce3bee8112f55b22ed55c2881bd128793b3e2 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Wed, 2 Jul 2025 21:49:19 +0000 Subject: [PATCH 05/10] formating --- llvm/lib/Target/DirectX/DXILRootSignature.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index 60ae7c0a6b2b1..41c2251c5f1e2 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -45,7 +45,7 @@ class RootSignatureBindingInfo { RootSignatureBindingInfo() = default; RootSignatureBindingInfo( SmallDenseMap Map) - : FuncToRsMap(Map){}; + : FuncToRsMap(Map) {}; iterator find(const Function *F) { return FuncToRsMap.find(F); } From f5720afd4c34075e17c2220dd92d0f10a60bbb43 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 4 Jul 2025 02:10:03 +0000 Subject: [PATCH 06/10] fix import issues --- llvm/lib/Target/DirectX/DXILRootSignature.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index 41c2251c5f1e2..e02f47ff60ae8 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -10,6 +10,8 @@ /// Root Signatures. /// //===----------------------------------------------------------------------===// +#ifndef LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H +#define LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H #include "llvm/ADT/DenseMap.h" #include "llvm/Analysis/DXILMetadataAnalysis.h" @@ -45,7 +47,7 @@ class RootSignatureBindingInfo { RootSignatureBindingInfo() = default; RootSignatureBindingInfo( SmallDenseMap Map) - : FuncToRsMap(Map) {}; + : FuncToRsMap(Map){}; iterator find(const Function *F) { return FuncToRsMap.find(F); } @@ -109,3 +111,4 @@ class RootSignatureAnalysisPrinter } // namespace dxil } // namespace llvm +#endif From ea54904cdc29c624cd40ecff7f4ce5fe0af17af6 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Fri, 4 Jul 2025 19:28:15 +0000 Subject: [PATCH 07/10] formating --- llvm/lib/Target/DirectX/DXILRootSignature.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index e02f47ff60ae8..3832182277050 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -47,7 +47,7 @@ class RootSignatureBindingInfo { RootSignatureBindingInfo() = default; RootSignatureBindingInfo( SmallDenseMap Map) - : FuncToRsMap(Map){}; + : FuncToRsMap(Map) {}; iterator find(const Function *F) { return FuncToRsMap.find(F); } From 881dd365da77a817dd2be4f2aed2426b15a38d24 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Mon, 7 Jul 2025 20:14:49 +0000 Subject: [PATCH 08/10] address comments --- llvm/lib/Target/DirectX/DXContainerGlobals.cpp | 3 ++- llvm/lib/Target/DirectX/DXILRootSignature.h | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp index 6c8ae8eaaea77..b6e8ce7d78b23 100644 --- a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp +++ b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp @@ -162,7 +162,8 @@ void DXContainerGlobals::addRootSignature(Module &M, auto &RSA = getAnalysis().getRSInfo(); const Function *EntryFunction = MMI.EntryPropertyVec[0].Entry; - const auto &RS = RSA.getDescForFunction(EntryFunction); + const std::optional &RS = + RSA.getDescForFunction(EntryFunction); if (!RS) return; diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index 3832182277050..e975ceb22ea54 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -47,7 +47,7 @@ class RootSignatureBindingInfo { RootSignatureBindingInfo() = default; RootSignatureBindingInfo( SmallDenseMap Map) - : FuncToRsMap(Map) {}; + : FuncToRsMap(Map){}; iterator find(const Function *F) { return FuncToRsMap.find(F); } @@ -88,8 +88,6 @@ class RootSignatureAnalysisWrapper : public ModulePass { public: static char ID; - using Result = RootSignatureBindingInfo; - RootSignatureAnalysisWrapper() : ModulePass(ID) {} RootSignatureBindingInfo &getRSInfo() { return *FuncToRsMap; } From c7d5be77bd7c5421aca2e105dbab84854e335703 Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 8 Jul 2025 17:18:15 +0000 Subject: [PATCH 09/10] format --- llvm/lib/Target/DirectX/DXILRootSignature.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index e975ceb22ea54..41c63939f93a6 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -47,7 +47,7 @@ class RootSignatureBindingInfo { RootSignatureBindingInfo() = default; RootSignatureBindingInfo( SmallDenseMap Map) - : FuncToRsMap(Map){}; + : FuncToRsMap(Map) {}; iterator find(const Function *F) { return FuncToRsMap.find(F); } From cc5afaefcafe97e92547c42c43c8747c0c7981fe Mon Sep 17 00:00:00 2001 From: joaosaffran Date: Tue, 8 Jul 2025 19:02:00 +0000 Subject: [PATCH 10/10] address changes --- llvm/lib/Target/DirectX/DXILRootSignature.cpp | 12 ++++-------- llvm/lib/Target/DirectX/DXILRootSignature.h | 3 --- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.cpp b/llvm/lib/Target/DirectX/DXILRootSignature.cpp index 5a53ea8a3631b..3848ad63dc468 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.cpp +++ b/llvm/lib/Target/DirectX/DXILRootSignature.cpp @@ -556,10 +556,7 @@ AnalysisKey RootSignatureAnalysis::Key; RootSignatureAnalysis::Result RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) { - if (!AnalysisResult) - AnalysisResult = std::make_unique( - RootSignatureBindingInfo(analyzeModule(M))); - return *AnalysisResult; + return RootSignatureBindingInfo(analyzeModule(M)); } //===----------------------------------------------------------------------===// @@ -638,15 +635,14 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M, //===----------------------------------------------------------------------===// bool RootSignatureAnalysisWrapper::runOnModule(Module &M) { - if (!FuncToRsMap) - FuncToRsMap = std::make_unique( - RootSignatureBindingInfo(analyzeModule(M))); + FuncToRsMap = std::make_unique( + RootSignatureBindingInfo(analyzeModule(M))); return false; } void RootSignatureAnalysisWrapper::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); - AU.addRequired(); + AU.addPreserved(); } char RootSignatureAnalysisWrapper::ID = 0; diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.h b/llvm/lib/Target/DirectX/DXILRootSignature.h index 41c63939f93a6..07dbd51bed391 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.h +++ b/llvm/lib/Target/DirectX/DXILRootSignature.h @@ -73,9 +73,6 @@ class RootSignatureAnalysis : public AnalysisInfoMixin { using Result = RootSignatureBindingInfo; Result run(Module &M, ModuleAnalysisManager &AM); - -private: - std::unique_ptr AnalysisResult; }; /// Wrapper pass for the legacy pass manager.