10
10
// / Root Signatures.
11
11
// /
12
12
// ===----------------------------------------------------------------------===//
13
+ #ifndef LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H
14
+ #define LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H
13
15
14
16
#include " llvm/ADT/DenseMap.h"
15
17
#include " llvm/Analysis/DXILMetadataAnalysis.h"
@@ -34,17 +36,44 @@ enum class RootSignatureElementKind {
34
36
DescriptorTable = 6 ,
35
37
StaticSamplers = 7
36
38
};
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
+
37
67
class RootSignatureAnalysis : public AnalysisInfoMixin <RootSignatureAnalysis> {
38
68
friend AnalysisInfoMixin<RootSignatureAnalysis>;
39
69
static AnalysisKey Key;
40
70
41
71
public:
42
72
RootSignatureAnalysis () = default ;
43
73
44
- using Result = SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc> ;
74
+ using Result = RootSignatureBindingInfo ;
45
75
46
- SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
47
- run (Module &M, ModuleAnalysisManager &AM);
76
+ Result run (Module &M, ModuleAnalysisManager &AM);
48
77
};
49
78
50
79
// / Wrapper pass for the legacy pass manager.
@@ -53,19 +82,13 @@ class RootSignatureAnalysis : public AnalysisInfoMixin<RootSignatureAnalysis> {
53
82
// / passes which run through the legacy pass manager.
54
83
class RootSignatureAnalysisWrapper : public ModulePass {
55
84
private:
56
- SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc > FuncToRsMap;
85
+ std::unique_ptr<RootSignatureBindingInfo > FuncToRsMap;
57
86
58
87
public:
59
88
static char ID;
60
-
61
89
RootSignatureAnalysisWrapper () : ModulePass(ID) {}
62
90
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; }
69
92
70
93
bool runOnModule (Module &M) override ;
71
94
@@ -84,3 +107,4 @@ class RootSignatureAnalysisPrinter
84
107
85
108
} // namespace dxil
86
109
} // namespace llvm
110
+ #endif
0 commit comments