mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Refactor rewinding code for finding the first terminator of a basic
block into MachineBasicBlock::getFirstTerminator(). This also fixes a bug in the implementation of the above in both RegAllocLocal and InstrSched, where instructions where added after the terminator if the basic block's only instruction was a terminator (it shouldn't matter for RegAllocLocal since this case never occurs in practice). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11748 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -143,22 +143,7 @@ bool PNE::EliminatePHINodes(MachineFunction &MF, MachineBasicBlock &MBB) {
|
||||
// source path the PHI.
|
||||
MachineBasicBlock &opBlock = *MI->getOperand(i).getMachineBasicBlock();
|
||||
|
||||
// Figure out where to insert the copy, which is at the end of the
|
||||
// predecessor basic block, but before any terminator/branch
|
||||
// instructions...
|
||||
MachineBasicBlock::iterator I = opBlock.end();
|
||||
if (I != opBlock.begin()) { // Handle empty blocks
|
||||
--I;
|
||||
// must backtrack over ALL the branches in the previous block
|
||||
while (MII.isTerminatorInstr(I->getOpcode()) &&
|
||||
I != opBlock.begin())
|
||||
--I;
|
||||
|
||||
// move back to the first branch instruction so new instructions
|
||||
// are inserted right in front of it and not in front of a non-branch
|
||||
if (!MII.isTerminatorInstr(I->getOpcode()))
|
||||
++I;
|
||||
}
|
||||
MachineBasicBlock::iterator I = opBlock.getFirstTerminator();
|
||||
|
||||
// Check to make sure we haven't already emitted the copy for this block.
|
||||
// This can happen because PHI nodes may have multiple entries for the
|
||||
|
Reference in New Issue
Block a user