@@ -287,6 +287,7 @@ static SPIRVType *propagateSPIRVType(MachineInstr *MI, SPIRVGlobalRegistry *GR,
287287 SpvType = GR->getSPIRVTypeForVReg (Reg);
288288 if (!SpvType) {
289289 switch (MI->getOpcode ()) {
290+ case TargetOpcode::G_FCONSTANT:
290291 case TargetOpcode::G_CONSTANT: {
291292 MIB.setInsertPt (*MI->getParent (), MI);
292293 Type *Ty = MI->getOperand (1 ).getCImm ()->getType ();
@@ -455,15 +456,6 @@ Register insertAssignInstr(Register Reg, Type *Ty, SPIRVType *SpvType,
455456
456457void processInstr (MachineInstr &MI, MachineIRBuilder &MIB,
457458 MachineRegisterInfo &MRI, SPIRVGlobalRegistry *GR) {
458- assert (MI.getNumDefs () > 0 && MRI.hasOneUse (MI.getOperand (0 ).getReg ()));
459- MachineInstr &AssignTypeInst =
460- *(MRI.use_instr_begin (MI.getOperand (0 ).getReg ()));
461- SPIRVType *SpvTypeRes = GR->getSPIRVTypeForVReg (MI.getOperand (0 ).getReg ());
462- auto NewReg =
463- createNewIdReg (SpvTypeRes, MI.getOperand (0 ).getReg (), MRI, *GR).first ;
464- GR->assignSPIRVTypeToVReg (SpvTypeRes, NewReg, MIB.getMF ());
465- AssignTypeInst.getOperand (1 ).setReg (NewReg);
466- MI.getOperand (0 ).setReg (NewReg);
467459 MIB.setInsertPt (*MI.getParent (), MI.getIterator ());
468460 for (auto &Op : MI.operands ()) {
469461 if (!Op.isReg () || Op.isDef ())
@@ -676,34 +668,10 @@ static void processInstrsWithTypeFolding(MachineFunction &MF,
676668 SPIRVGlobalRegistry *GR,
677669 MachineIRBuilder MIB) {
678670 MachineRegisterInfo &MRI = MF.getRegInfo ();
679- for (MachineBasicBlock &MBB : MF) {
680- for (MachineInstr &MI : MBB) {
671+ for (MachineBasicBlock &MBB : MF)
672+ for (MachineInstr &MI : MBB)
681673 if (isTypeFoldingSupported (MI.getOpcode ()))
682674 processInstr (MI, MIB, MRI, GR);
683- }
684- }
685-
686- for (MachineBasicBlock &MBB : MF) {
687- for (MachineInstr &MI : MBB) {
688- // We need to rewrite dst types for ASSIGN_TYPE instrs to be able
689- // to perform tblgen'erated selection and we can't do that on Legalizer
690- // as it operates on gMIR only.
691- if (MI.getOpcode () != SPIRV::ASSIGN_TYPE)
692- continue ;
693- Register SrcReg = MI.getOperand (1 ).getReg ();
694- unsigned Opcode = MRI.getVRegDef (SrcReg)->getOpcode ();
695- if (!isTypeFoldingSupported (Opcode))
696- continue ;
697- Register DstReg = MI.getOperand (0 ).getReg ();
698- // Don't need to reset type of register holding constant and used in
699- // G_ADDRSPACE_CAST, since it breaks legalizer.
700- if (Opcode == TargetOpcode::G_CONSTANT && MRI.hasOneUse (DstReg)) {
701- MachineInstr &UseMI = *MRI.use_instr_begin (DstReg);
702- if (UseMI.getOpcode () == TargetOpcode::G_ADDRSPACE_CAST)
703- continue ;
704- }
705- }
706- }
707675}
708676
709677static Register
0 commit comments