@@ -548,7 +548,8 @@ bool SPIRVInstructionSelector::select(MachineInstr &I) {
548548 Register ResVReg = HasDefs ? I.getOperand (0 ).getReg () : Register (0 );
549549 SPIRVType *ResType = HasDefs ? GR.getSPIRVTypeForVReg (ResVReg) : nullptr ;
550550 assert (!HasDefs || ResType || I.getOpcode () == TargetOpcode::G_GLOBAL_VALUE ||
551- I.getOpcode () == TargetOpcode::G_IMPLICIT_DEF);
551+ I.getOpcode () == TargetOpcode::G_IMPLICIT_DEF ||
552+ I.getOpcode () == TargetOpcode::G_POISON);
552553 if (spvSelect (ResVReg, ResType, I)) {
553554 if (HasDefs) // Make all vregs 64 bits (for SPIR-V IDs).
554555 for (unsigned i = 0 ; i < I.getNumDefs (); ++i)
@@ -598,6 +599,7 @@ bool SPIRVInstructionSelector::spvSelect(Register ResVReg,
598599 case TargetOpcode::G_GLOBAL_VALUE:
599600 return selectGlobalValue (ResVReg, I);
600601 case TargetOpcode::G_IMPLICIT_DEF:
602+ case TargetOpcode::G_POISON:
601603 return selectOpUndef (ResVReg, ResType, I);
602604 case TargetOpcode::G_FREEZE:
603605 return selectFreeze (ResVReg, ResType, I);
@@ -2326,7 +2328,8 @@ bool SPIRVInstructionSelector::selectFreeze(Register ResVReg,
23262328 case SPIRV::ASSIGN_TYPE:
23272329 if (MachineInstr *AssignToDef =
23282330 MRI->getVRegDef (Def->getOperand (1 ).getReg ())) {
2329- if (AssignToDef->getOpcode () == TargetOpcode::G_IMPLICIT_DEF)
2331+ if (AssignToDef->getOpcode () == TargetOpcode::G_IMPLICIT_DEF ||
2332+ AssignToDef->getOpcode () == TargetOpcode::G_POISON)
23302333 Reg = Def->getOperand (2 ).getReg ();
23312334 }
23322335 break ;
0 commit comments