aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/UnreachableBlockElim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/UnreachableBlockElim.cpp')
-rw-r--r--lib/CodeGen/UnreachableBlockElim.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/CodeGen/UnreachableBlockElim.cpp b/lib/CodeGen/UnreachableBlockElim.cpp
index 177bab32bccc..3289eff71336 100644
--- a/lib/CodeGen/UnreachableBlockElim.cpp
+++ b/lib/CodeGen/UnreachableBlockElim.cpp
@@ -103,7 +103,8 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
df_iterator_default_set<MachineBasicBlock*> Reachable;
bool ModifiedPHI = false;
- MMI = getAnalysisIfAvailable<MachineModuleInfo>();
+ auto *MMIWP = getAnalysisIfAvailable<MachineModuleInfoWrapperPass>();
+ MMI = MMIWP ? &MMIWP->getMMI() : nullptr;
MachineDominatorTree *MDT = getAnalysisIfAvailable<MachineDominatorTree>();
MachineLoopInfo *MLI = getAnalysisIfAvailable<MachineLoopInfo>();
@@ -146,8 +147,14 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
}
// Actually remove the blocks now.
- for (unsigned i = 0, e = DeadBlocks.size(); i != e; ++i)
+ for (unsigned i = 0, e = DeadBlocks.size(); i != e; ++i) {
+ // Remove any call site information for calls in the block.
+ for (auto &I : DeadBlocks[i]->instrs())
+ if (I.isCall(MachineInstr::IgnoreBundle))
+ DeadBlocks[i]->getParent()->eraseCallSiteInfo(&I);
+
DeadBlocks[i]->eraseFromParent();
+ }
// Cleanup PHI nodes.
for (MachineFunction::iterator I = F.begin(), E = F.end(); I != E; ++I) {
@@ -167,8 +174,8 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
if (phi->getNumOperands() == 3) {
const MachineOperand &Input = phi->getOperand(1);
const MachineOperand &Output = phi->getOperand(0);
- unsigned InputReg = Input.getReg();
- unsigned OutputReg = Output.getReg();
+ Register InputReg = Input.getReg();
+ Register OutputReg = Output.getReg();
assert(Output.getSubReg() == 0 && "Cannot have output subregister");
ModifiedPHI = true;