[llvm] [SPIR-V] Move ASSIGN_TYPE generation to PostLegalizer (PR #169696)
Nathan Gauër via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 27 06:45:04 PST 2025
================
@@ -425,52 +425,21 @@ static void setInsertPtAfterDef(MachineIRBuilder &MIB, MachineInstr *Def) {
}
namespace llvm {
-void insertAssignInstr(Register Reg, Type *Ty, SPIRVType *SpvType,
- SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB,
- MachineRegisterInfo &MRI) {
+void updateRegType(Register Reg, Type *Ty, SPIRVType *SpvType,
+ SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB,
+ MachineRegisterInfo &MRI) {
assert((Ty || SpvType) && "Either LLVM or SPIRV type is expected.");
MachineInstr *Def = MRI.getVRegDef(Reg);
setInsertPtAfterDef(MIB, Def);
if (!SpvType)
SpvType = GR->getOrCreateSPIRVType(Ty, MIB,
SPIRV::AccessQualifier::ReadWrite, true);
-
- if (!isTypeFoldingSupported(Def->getOpcode())) {
- // No need to generate SPIRV::ASSIGN_TYPE pseudo-instruction
- if (!MRI.getRegClassOrNull(Reg))
- MRI.setRegClass(Reg, GR->getRegClass(SpvType));
- if (!MRI.getType(Reg).isValid())
- MRI.setType(Reg, GR->getRegType(SpvType));
- GR->assignSPIRVTypeToVReg(SpvType, Reg, MIB.getMF());
- return;
- }
-
- // Tablegen definition assumes SPIRV::ASSIGN_TYPE pseudo-instruction is
- // present after each auto-folded instruction to take a type reference from.
- Register NewReg = MRI.createGenericVirtualRegister(MRI.getType(Reg));
- const auto *RegClass = GR->getRegClass(SpvType);
- MRI.setRegClass(NewReg, RegClass);
- MRI.setRegClass(Reg, RegClass);
-
+ if (!MRI.getRegClassOrNull(Reg))
+ MRI.setRegClass(Reg, GR->getRegClass(SpvType));
+ if (!MRI.getType(Reg).isValid())
+ MRI.setType(Reg, GR->getRegType(SpvType));
GR->assignSPIRVTypeToVReg(SpvType, Reg, MIB.getMF());
- // This is to make it convenient for Legalizer to get the SPIRVType
- // when processing the actual MI (i.e. not pseudo one).
- GR->assignSPIRVTypeToVReg(SpvType, NewReg, MIB.getMF());
- // Copy MIFlags from Def to ASSIGN_TYPE instruction. It's required to keep
- // the flags after instruction selection.
- const uint32_t Flags = Def->getFlags();
- MIB.buildInstr(SPIRV::ASSIGN_TYPE)
- .addDef(Reg)
- .addUse(NewReg)
- .addUse(GR->getSPIRVTypeID(SpvType))
- .setMIFlags(Flags);
- for (unsigned I = 0, E = Def->getNumDefs(); I != E; ++I) {
- MachineOperand &MO = Def->getOperand(I);
- if (MO.getReg() == Reg) {
- MO.setReg(NewReg);
- break;
- }
- }
+ return;
----------------
Keenuts wrote:
remove
https://github.com/llvm/llvm-project/pull/169696
More information about the llvm-commits
mailing list