GlobalISel: avoid looking too closely at PHIs when we bail.
The function used to finish off PHIs by adding the relevant basic blocks can
fail if we're aborting and still don't actually have the needed
MachineBasicBlocks. So avoid trying in that case.
llvm-svn: 288727
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 68fec1a..c986e65 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -678,8 +678,6 @@
MIB.addMBB(BBToMBB[PI->getIncomingBlock(i)]);
}
}
-
- PendingPHIs.clear();
}
bool IRTranslator::translate(const Instruction &Inst) {
@@ -725,10 +723,9 @@
}
void IRTranslator::finalizeFunction() {
- finishPendingPhis();
-
// Release the memory used by the different maps we
// needed during the translation.
+ PendingPHIs.clear();
ValToVReg.clear();
FrameIndices.clear();
Constants.clear();
@@ -758,6 +755,7 @@
if (!TPC->isGlobalISelAbortEnabled()) {
MIRBuilder.getMF().getProperties().set(
MachineFunctionProperties::Property::FailedISel);
+ finalizeFunction();
return false;
}
report_fatal_error("Unable to lower arguments");
@@ -777,7 +775,7 @@
MIRBuilder.setMBB(MBB);
for (const Instruction &Inst: BB) {
- bool Succeeded = translate(Inst);
+ Succeeded &= translate(Inst);
if (!Succeeded) {
if (TPC->isGlobalISelAbortEnabled())
reportTranslationError(Inst, "unable to translate instruction");
@@ -787,11 +785,15 @@
}
}
- finalizeFunction();
+ if (Succeeded) {
+ finishPendingPhis();
- // Now that the MachineFrameInfo has been configured, no further changes to
- // the reserved registers are possible.
- MRI->freezeReservedRegs(MF);
+ // Now that the MachineFrameInfo has been configured, no further changes to
+ // the reserved registers are possible.
+ MRI->freezeReservedRegs(MF);
+ }
+
+ finalizeFunction();
return false;
}