From 7851bc1871dcb7c31b603b17cf975ae0b55f4c30 Mon Sep 17 00:00:00 2001 From: Reed Kotler Date: Wed, 6 Nov 2013 04:29:52 +0000 Subject: [PATCH] Fix definition for Mips16 pc relative load word instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194126 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Mips/MipsConstantIslandPass.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/Target/Mips/MipsConstantIslandPass.cpp b/lib/Target/Mips/MipsConstantIslandPass.cpp index a79692e47d8..6d6f942a242 100644 --- a/lib/Target/Mips/MipsConstantIslandPass.cpp +++ b/lib/Target/Mips/MipsConstantIslandPass.cpp @@ -614,12 +614,13 @@ initializeFunctionInfo(const std::vector &CPEMIs) { llvm_unreachable("Unknown addressing mode for CP reference!"); case Mips::LwRxPcTcp16: Bits = 8; - Scale = 2; + Scale = 4; LongFormOpcode = Mips::LwRxPcTcpX16; break; case Mips::LwRxPcTcpX16: Bits = 16; - Scale = 2; + Scale = 1; + NegOk = true; break; } // Remember that this is a user of a CP entry. @@ -782,9 +783,6 @@ MachineBasicBlock *MipsConstantIslands::splitBlockBeforeInstr /// isOffsetInRange - Checks whether UserOffset (the location of a constant pool /// reference) is within MaxDisp of TrialOffset (a proposed location of a /// constant pool entry). -/// UserOffset is computed by getUserOffset above to include PC adjustments. If -/// the mod 4 alignment of UserOffset is not known, the uncertainty must be -/// subtracted from MaxDisp instead. CPUser::getMaxDisp() does that. bool MipsConstantIslands::isOffsetInRange(unsigned UserOffset, unsigned TrialOffset, unsigned MaxDisp, bool NegativeOK) { -- 2.34.1