Follow-up patch to r162731.

Fix a couple of bugs in mips' long branch pass.
This patch was supposed to be committed along with r162731, so I don't have a
new test case.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162777 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Akira Hatanaka 2012-08-28 18:58:57 +00:00
parent 4ba6916a98
commit 4fb08317af

View File

@ -257,10 +257,10 @@ void MipsLongBranch::expandToLongBranch(MBBInfo &I) {
LongBrMBB->addSuccessor(BalTgtMBB); LongBrMBB->addSuccessor(BalTgtMBB);
BalTgtMBB->addSuccessor(TgtMBB); BalTgtMBB->addSuccessor(TgtMBB);
uint64_t TgtAddress = MBBInfos[TgtMBB->getNumber()].Address; int64_t TgtAddress = MBBInfos[TgtMBB->getNumber()].Address;
uint64_t Offset = TgtAddress - (I.Address + I.Size - 20); int64_t Offset = TgtAddress - (I.Address + I.Size - 20);
uint64_t Lo = Offset & 0xffff; int64_t Lo = SignExtend64<16>(Offset & 0xffff);
uint64_t Hi = ((Offset + 0x8000) >> 16) & 0xffff; int64_t Hi = SignExtend64<16>(((Offset + 0x8000) >> 16) & 0xffff);
if (ABI != MipsSubtarget::N64) { if (ABI != MipsSubtarget::N64) {
// $longbr: // $longbr:
@ -317,8 +317,9 @@ void MipsLongBranch::expandToLongBranch(MBBInfo &I) {
// $fallthrough: // $fallthrough:
// //
uint64_t Higher = ((Offset + 0x80008000) >> 32) & 0xffff; int64_t Higher = SignExtend64<16>(((Offset + 0x80008000) >> 32) & 0xffff);
uint64_t Highest = ((Offset + 0x800080008000LL) >> 48) & 0xffff; int64_t Highest =
SignExtend64<16>(((Offset + 0x800080008000LL) >> 48) & 0xffff);
Pos = LongBrMBB->begin(); Pos = LongBrMBB->begin();
@ -412,7 +413,7 @@ bool MipsLongBranch::runOnMachineFunction(MachineFunction &F) {
continue; continue;
I->HasLongBranch = true; I->HasLongBranch = true;
I->Size += LongBranchSeqSize; I->Size += LongBranchSeqSize * 4;
++LongBranches; ++LongBranches;
EverMadeChange = MadeChange = true; EverMadeChange = MadeChange = true;
} }
@ -427,7 +428,7 @@ bool MipsLongBranch::runOnMachineFunction(MachineFunction &F) {
uint64_t Address = 0; uint64_t Address = 0;
for (I = MBBInfos.begin(); I != E; ++I, Address += I->Size) for (I = MBBInfos.begin(); I != E; Address += I->Size, ++I)
I->Address = Address; I->Address = Address;
} }