1010// / Root Signatures.
1111// /
1212// ===----------------------------------------------------------------------===//
13+ #ifndef LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H
14+ #define LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H
1315
1416#include " llvm/ADT/DenseMap.h"
1517#include " llvm/Analysis/DXILMetadataAnalysis.h"
@@ -34,17 +36,44 @@ enum class RootSignatureElementKind {
3436 DescriptorTable = 6 ,
3537 StaticSamplers = 7
3638};
39+
40+ class RootSignatureBindingInfo {
41+ private:
42+ SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> FuncToRsMap;
43+
44+ public:
45+ using iterator =
46+ SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>::iterator;
47+
48+ RootSignatureBindingInfo () = default ;
49+ RootSignatureBindingInfo (
50+ SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> Map)
51+ : FuncToRsMap(Map) {};
52+
53+ iterator find (const Function *F) { return FuncToRsMap.find (F); }
54+
55+ iterator end () { return FuncToRsMap.end (); }
56+
57+ std::optional<mcdxbc::RootSignatureDesc>
58+ getDescForFunction (const Function *F) {
59+ const auto FuncRs = find (F);
60+ if (FuncRs == end ())
61+ return std::nullopt ;
62+
63+ return FuncRs->second ;
64+ }
65+ };
66+
3767class RootSignatureAnalysis : public AnalysisInfoMixin <RootSignatureAnalysis> {
3868 friend AnalysisInfoMixin<RootSignatureAnalysis>;
3969 static AnalysisKey Key;
4070
4171public:
4272 RootSignatureAnalysis () = default ;
4373
44- using Result = SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc> ;
74+ using Result = RootSignatureBindingInfo ;
4575
46- SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
47- run (Module &M, ModuleAnalysisManager &AM);
76+ Result run (Module &M, ModuleAnalysisManager &AM);
4877};
4978
5079// / Wrapper pass for the legacy pass manager.
@@ -53,19 +82,13 @@ class RootSignatureAnalysis : public AnalysisInfoMixin<RootSignatureAnalysis> {
5382// / passes which run through the legacy pass manager.
5483class RootSignatureAnalysisWrapper : public ModulePass {
5584private:
56- SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc > FuncToRsMap;
85+ std::unique_ptr<RootSignatureBindingInfo > FuncToRsMap;
5786
5887public:
5988 static char ID;
60-
6189 RootSignatureAnalysisWrapper () : ModulePass(ID) {}
6290
63- using iterator =
64- SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>::iterator;
65-
66- iterator find (const Function *F) { return FuncToRsMap.find (F); }
67-
68- iterator end () { return FuncToRsMap.end (); }
91+ RootSignatureBindingInfo &getRSInfo () { return *FuncToRsMap; }
6992
7093 bool runOnModule (Module &M) override ;
7194
@@ -84,3 +107,4 @@ class RootSignatureAnalysisPrinter
84107
85108} // namespace dxil
86109} // namespace llvm
110+ #endif
0 commit comments