Skip to content

Commit c248de2

Browse files
committed
Set insertion point in MIB.
1 parent f2f29a5 commit c248de2

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

318325
static 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

362369
static 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

Comments
 (0)