@@ -138,11 +138,14 @@ static SPIRVType *deduceTypeForGBuildVector(MachineInstr *I,
138138 MachineIRBuilder &MIB,
139139 Register ResVReg) {
140140 MachineRegisterInfo &MRI = MF.getRegInfo ();
141+ LLVM_DEBUG (dbgs () << " deduceTypeForGBuildVector: Processing " << *I << " \n " );
141142 // First check if any of the operands have a type.
142143 for (unsigned i = 1 ; i < I->getNumOperands (); ++i) {
143144 if (SPIRVType *OpType =
144145 GR->getSPIRVTypeForVReg (I->getOperand (i).getReg ())) {
145146 const LLT &ResLLT = MRI.getType (ResVReg);
147+ LLVM_DEBUG (dbgs () << " deduceTypeForGBuildVector: Found operand type "
148+ << *OpType << " , returning vector type\n " );
146149 return GR->getOrCreateSPIRVVectorType (OpType, ResLLT.getNumElements (),
147150 MIB, false );
148151 }
@@ -153,11 +156,14 @@ static SPIRVType *deduceTypeForGBuildVector(MachineInstr *I,
153156 Register ExtractResReg = Use.getOperand (0 ).getReg ();
154157 if (SPIRVType *ScalarType = GR->getSPIRVTypeForVReg (ExtractResReg)) {
155158 const LLT &ResLLT = MRI.getType (ResVReg);
159+ LLVM_DEBUG (dbgs () << " deduceTypeForGBuildVector: Found use type "
160+ << *ScalarType << " , returning vector type\n " );
156161 return GR->getOrCreateSPIRVVectorType (
157162 ScalarType, ResLLT.getNumElements (), MIB, false );
158163 }
159164 }
160165 }
166+ LLVM_DEBUG (dbgs () << " deduceTypeForGBuildVector: Could not deduce type\n " );
161167 return nullptr ;
162168}
163169
@@ -191,7 +197,8 @@ static SPIRVType *deduceTypeForGIntrinsic(MachineInstr *I, MachineFunction &MF,
191197 for (const auto &Use : MRI.use_nodbg_instructions (ResVReg)) {
192198 const unsigned UseOpc = Use.getOpcode ();
193199 assert (UseOpc == TargetOpcode::G_EXTRACT_VECTOR_ELT ||
194- UseOpc == TargetOpcode::G_SHUFFLE_VECTOR);
200+ UseOpc == TargetOpcode::G_SHUFFLE_VECTOR ||
201+ UseOpc == TargetOpcode::G_BUILD_VECTOR);
195202 Register UseResultReg = Use.getOperand (0 ).getReg ();
196203 if (SPIRVType *UseResType = GR->getSPIRVTypeForVReg (UseResultReg)) {
197204 SPIRVType *ScalarType = GR->getScalarOrVectorComponentType (UseResType);
@@ -316,8 +323,7 @@ static bool requiresSpirvType(MachineInstr &I, SPIRVGlobalRegistry *GR,
316323}
317324
318325static void registerSpirvTypeForNewInstructions (MachineFunction &MF,
319- SPIRVGlobalRegistry *GR,
320- MachineIRBuilder MIB) {
326+ SPIRVGlobalRegistry *GR) {
321327 MachineRegisterInfo &MRI = MF.getRegInfo ();
322328 SmallVector<MachineInstr *, 8 > Worklist;
323329 for (MachineBasicBlock &MBB : MF) {
@@ -342,6 +348,7 @@ static void registerSpirvTypeForNewInstructions(MachineFunction &MF,
342348 SmallVector<MachineInstr *, 8 > NextWorklist;
343349
344350 for (MachineInstr *I : Worklist) {
351+ MachineIRBuilder MIB (*I);
345352 if (deduceAndAssignSpirvType (I, MF, GR, MIB)) {
346353 Changed = true ;
347354 } else {
@@ -360,8 +367,7 @@ static void registerSpirvTypeForNewInstructions(MachineFunction &MF,
360367}
361368
362369static void ensureAssignTypeForTypeFolding (MachineFunction &MF,
363- SPIRVGlobalRegistry *GR,
364- MachineIRBuilder MIB) {
370+ SPIRVGlobalRegistry *GR) {
365371 LLVM_DEBUG (dbgs () << " Entering ensureAssignTypeForTypeFolding for function "
366372 << MF.getName () << " \n " );
367373 MachineRegisterInfo &MRI = MF.getRegInfo ();
@@ -395,6 +401,7 @@ static void ensureAssignTypeForTypeFolding(MachineFunction &MF,
395401 dbgs () << " Adding ASSIGN_TYPE for ResultRegister: "
396402 << printReg (ResultRegister, MRI.getTargetRegisterInfo ())
397403 << " with type: " << *ResultType);
404+ MachineIRBuilder MIB (MI);
398405 insertAssignInstr (ResultRegister, nullptr , ResultType, GR, MIB, MRI);
399406 }
400407 }
@@ -460,9 +467,8 @@ bool SPIRVPostLegalizer::runOnMachineFunction(MachineFunction &MF) {
460467 const SPIRVSubtarget &ST = MF.getSubtarget <SPIRVSubtarget>();
461468 SPIRVGlobalRegistry *GR = ST.getSPIRVGlobalRegistry ();
462469 GR->setCurrentFunc (MF);
463- MachineIRBuilder MIB (MF);
464- registerSpirvTypeForNewInstructions (MF, GR, MIB);
465- ensureAssignTypeForTypeFolding (MF, GR, MIB);
470+ registerSpirvTypeForNewInstructions (MF, GR);
471+ ensureAssignTypeForTypeFolding (MF, GR);
466472 lowerExtractVectorElements (MF);
467473
468474 return true ;
0 commit comments