[llvm] [SPIRV] Update the global registry when expanding function pointer (PR #183873)
Steven Perron via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 4 06:12:12 PST 2026
================
@@ -5328,33 +5327,35 @@ bool SPIRVInstructionSelector::selectGlobalValue(
Register FuncVReg =
MRI->createGenericVirtualRegister(GR.getRegType(ResType));
MRI->setRegClass(FuncVReg, &SPIRV::pIDRegClass);
+ GR.assignSPIRVTypeToVReg(ResType, FuncVReg, *GR.CurMF);
MachineInstrBuilder MIB1 =
BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpUndef))
.addDef(FuncVReg)
.addUse(ResTypeReg);
MachineInstrBuilder MIB2 =
BuildMI(BB, I, I.getDebugLoc(),
TII.get(SPIRV::OpConstantFunctionPointerINTEL))
- .addDef(NewReg)
+ .addDef(ResVReg)
.addUse(ResTypeReg)
.addUse(FuncVReg);
GR.add(ConstVal, MIB2);
// mapping the function pointer to the used Function
GR.recordFunctionPointer(&MIB2.getInstr()->getOperand(2), GVFun);
+ GR.assignSPIRVTypeToVReg(ResType, ResVReg, *GR.CurMF);
MIB1.constrainAllUses(TII, TRI, RBI);
MIB2.constrainAllUses(TII, TRI, RBI);
return true;
}
MachineInstrBuilder MIB3 =
BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpConstantNull))
- .addDef(NewReg)
+ .addDef(ResVReg)
.addUse(GR.getSPIRVTypeID(ResType));
GR.add(ConstVal, MIB3);
MIB3.constrainAllUses(TII, TRI, RBI);
return true;
}
- assert(NewReg != ResVReg);
- return BuildCOPY(ResVReg, NewReg, I);
+ assert(ResVReg != ResVReg);
----------------
s-perron wrote:
Stupid mistake on my part. I must have use the wrong if statement as the scope for my change. I fixed it. It also shows that that code path is not tested.
https://github.com/llvm/llvm-project/pull/183873
More information about the llvm-commits
mailing list