mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Fix PPC branch selection for counter-based branches
Although I had added some support for the BDZ/BDNZ branches into the selector (in r158204), I had not correctly adjusted the condition at the top of the loop. As a result, these branches were still essentially unsupported. This fixes PR16086. Unfortunately, any test case would be very large (because it would need to force the loop backedge to exceed the range of the 16-bit immediate). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182385 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0c61b6f7ff
commit
75e9ee8b7f
@ -112,15 +112,21 @@ bool PPCBSel::runOnMachineFunction(MachineFunction &Fn) {
|
||||
unsigned MBBStartOffset = 0;
|
||||
for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end();
|
||||
I != E; ++I) {
|
||||
if (I->getOpcode() != PPC::BCC || I->getOperand(2).isImm()) {
|
||||
MachineBasicBlock *Dest = 0;
|
||||
if (I->getOpcode() == PPC::BCC && !I->getOperand(2).isImm())
|
||||
Dest = I->getOperand(2).getMBB();
|
||||
else if ((I->getOpcode() == PPC::BDNZ8 || I->getOpcode() == PPC::BDNZ ||
|
||||
I->getOpcode() == PPC::BDZ8 || I->getOpcode() == PPC::BDZ) &&
|
||||
!I->getOperand(0).isImm())
|
||||
Dest = I->getOperand(0).getMBB();
|
||||
|
||||
if (!Dest) {
|
||||
MBBStartOffset += TII->GetInstSizeInBytes(I);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Determine the offset from the current branch to the destination
|
||||
// block.
|
||||
MachineBasicBlock *Dest = I->getOperand(2).getMBB();
|
||||
|
||||
int BranchSize;
|
||||
if (Dest->getNumber() <= MBB.getNumber()) {
|
||||
// If this is a backwards branch, the delta is the offset from the
|
||||
|
Loading…
Reference in New Issue
Block a user