@@ -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).
121121class 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
125126public:
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