@@ -33,16 +33,43 @@ enum class RootSignatureElementKind {
33
33
CBV = 5 ,
34
34
DescriptorTable = 6 ,
35
35
};
36
+
37
+ class RootSignatureBindingInfo {
38
+ private:
39
+ SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> FuncToRsMap;
40
+
41
+ public:
42
+ using iterator =
43
+ SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>::iterator;
44
+
45
+ RootSignatureBindingInfo () = default ;
46
+ RootSignatureBindingInfo (SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> Map) : FuncToRsMap(Map) {};
47
+
48
+ iterator find (const Function *F) { return FuncToRsMap.find (F); }
49
+
50
+ iterator end () { return FuncToRsMap.end (); }
51
+
52
+ std::optional<mcdxbc::RootSignatureDesc> getDescForFunction (const Function* F) {
53
+ const auto FuncRs = find (F);
54
+ if (FuncRs == end ())
55
+ return std::nullopt;
56
+
57
+ return FuncRs->second ;
58
+ }
59
+
60
+ };
61
+
36
62
class RootSignatureAnalysis : public AnalysisInfoMixin <RootSignatureAnalysis> {
37
63
friend AnalysisInfoMixin<RootSignatureAnalysis>;
38
64
static AnalysisKey Key;
39
65
40
66
public:
41
- RootSignatureAnalysis () = default ;
42
67
43
- using Result = SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc> ;
68
+ RootSignatureAnalysis () = default ;
44
69
45
- SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
70
+ using Result = RootSignatureBindingInfo;
71
+
72
+ RootSignatureBindingInfo
46
73
run (Module &M, ModuleAnalysisManager &AM);
47
74
};
48
75
@@ -52,20 +79,16 @@ class RootSignatureAnalysis : public AnalysisInfoMixin<RootSignatureAnalysis> {
52
79
// / passes which run through the legacy pass manager.
53
80
class RootSignatureAnalysisWrapper : public ModulePass {
54
81
private:
55
- SmallDenseMap< const Function *, mcdxbc::RootSignatureDesc > FuncToRsMap;
82
+ std::unique_ptr<RootSignatureBindingInfo > FuncToRsMap;
56
83
57
84
public:
58
85
static char ID;
86
+ using Result = RootSignatureBindingInfo;
59
87
60
88
RootSignatureAnalysisWrapper () : ModulePass(ID) {}
61
89
62
- using iterator =
63
- SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>::iterator;
64
-
65
- iterator find (const Function *F) { return FuncToRsMap.find (F); }
66
-
67
- iterator end () { return FuncToRsMap.end (); }
68
-
90
+ RootSignatureBindingInfo& getRSInfo () {return *FuncToRsMap;}
91
+
69
92
bool runOnModule (Module &M) override ;
70
93
71
94
void getAnalysisUsage (AnalysisUsage &AU) const override ;
0 commit comments