Skip to content

Commit ca888f0

Browse files
joaosaffranjoaosaffran
andauthored
[DirectX][NFC] Refactor DXILRootSignature to follow the same pattern as other analysis (#146783)
When implementing #146785, notice `DXILRootSignature` had some design changes that made it harder to integrate with other analysis. This change refactors `DXILRootSignature` to solve this issue. --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
1 parent ab0d11c commit ca888f0

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

llvm/lib/Target/DirectX/DXContainerGlobals.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,18 @@ void DXContainerGlobals::addRootSignature(Module &M,
160160

161161
assert(MMI.EntryPropertyVec.size() == 1);
162162

163-
auto &RSA = getAnalysis<RootSignatureAnalysisWrapper>();
163+
auto &RSA = getAnalysis<RootSignatureAnalysisWrapper>().getRSInfo();
164164
const Function *EntryFunction = MMI.EntryPropertyVec[0].Entry;
165-
const auto &FuncRs = RSA.find(EntryFunction);
165+
const std::optional<mcdxbc::RootSignatureDesc> &RS =
166+
RSA.getDescForFunction(EntryFunction);
166167

167-
if (FuncRs == RSA.end())
168+
if (!RS)
168169
return;
169170

170-
const RootSignatureDesc &RS = FuncRs->second;
171171
SmallString<256> Data;
172172
raw_svector_ostream OS(Data);
173173

174-
RS.write(OS);
174+
RS->write(OS);
175175

176176
Constant *Constant =
177177
ConstantDataArray::getString(M.getContext(), Data, /*AddNull*/ false);

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -596,18 +596,17 @@ analyzeModule(Module &M) {
596596

597597
AnalysisKey RootSignatureAnalysis::Key;
598598

599-
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
599+
RootSignatureAnalysis::Result
600600
RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) {
601-
return analyzeModule(M);
601+
return RootSignatureBindingInfo(analyzeModule(M));
602602
}
603603

604604
//===----------------------------------------------------------------------===//
605605

606606
PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
607607
ModuleAnalysisManager &AM) {
608608

609-
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> &RSDMap =
610-
AM.getResult<RootSignatureAnalysis>(M);
609+
RootSignatureBindingInfo &RSDMap = AM.getResult<RootSignatureAnalysis>(M);
611610

612611
OS << "Root Signature Definitions"
613612
<< "\n";
@@ -678,13 +677,14 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
678677

679678
//===----------------------------------------------------------------------===//
680679
bool RootSignatureAnalysisWrapper::runOnModule(Module &M) {
681-
FuncToRsMap = analyzeModule(M);
680+
FuncToRsMap = std::make_unique<RootSignatureBindingInfo>(
681+
RootSignatureBindingInfo(analyzeModule(M)));
682682
return false;
683683
}
684684

685685
void RootSignatureAnalysisWrapper::getAnalysisUsage(AnalysisUsage &AU) const {
686686
AU.setPreservesAll();
687-
AU.addRequired<DXILMetadataAnalysisWrapperPass>();
687+
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
688688
}
689689

690690
char RootSignatureAnalysisWrapper::ID = 0;

llvm/lib/Target/DirectX/DXILRootSignature.h

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
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+
3767
class RootSignatureAnalysis : public AnalysisInfoMixin<RootSignatureAnalysis> {
3868
friend AnalysisInfoMixin<RootSignatureAnalysis>;
3969
static AnalysisKey Key;
4070

4171
public:
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.
5483
class RootSignatureAnalysisWrapper : public ModulePass {
5584
private:
56-
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> FuncToRsMap;
85+
std::unique_ptr<RootSignatureBindingInfo> FuncToRsMap;
5786

5887
public:
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

Comments
 (0)