Skip to content

Commit 82506e2

Browse files
add a new duplicate tracker
1 parent be4d4ff commit 82506e2

File tree

2 files changed

+192
-183
lines changed

2 files changed

+192
-183
lines changed

llvm/lib/Target/SPIRV/SPIRVDuplicatesTracker.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,15 @@ inline IRHandle make_descr_ptr(const void *Ptr) {
119119
// pairs support management of unique SPIR-V definitions per machine function
120120
// per an LLVM/GlobalISel entity (e.g., Type, Constant, Machine Instruction).
121121
class SPIRVIRMap {
122-
DenseMap < std::pair<IRHandle, const MachineFunction *>, Register >> Vregs;
122+
DenseMap < std::pair<IRHandle, const MachineFunction *>,
123+
const MachineInstr *MI >> Vregs;
123124
DenseMap<const MachineInstr *, IRHandle> Defs;
124125

125126
public:
126127
bool add(IRHandle Handle, const MachineInstr *MI) {
127128
auto [It, Inserted] =
128-
Vregs.try_emplace(std::make_pair(Handle, MI->getMF()));
129+
Vregs.try_emplace(std::make_pair(Handle, MI->getMF()), MI);
129130
if (Inserted) {
130-
It->second = MI->getOperand(0).getReg();
131131
auto [_, IsConsistent] = Defs.insert_or_assign(MI, Handle);
132132
assert(IsConsistent);
133133
}
@@ -141,10 +141,14 @@ class SPIRVIRMap {
141141
}
142142
return Res;
143143
}
144-
Register find(IRHandle Handle, const MachineFunction *MF) {
144+
const MachineInstr *findMI(IRHandle Handle, const MachineFunction *MF) {
145145
if (auto It = Vregs.find(std::make_pair(Handle, MF)); It != Vregs.end())
146146
return It->second;
147-
return Register();
147+
return nullptr;
148+
}
149+
Register find(IRHandle Handle, const MachineFunction *MF) {
150+
const MachineInstr *MI = findMI(Handle, MF);
151+
return MI ? MI->getOperand(0).getReg() : Register();
148152
}
149153

150154
// helpers

0 commit comments

Comments
 (0)