diff options
-rw-r--r-- | lib/Target/ARM/ARMBaseRegisterInfo.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/lib/Target/ARM/ARMBaseRegisterInfo.cpp index 0fa1727310..e692988fd5 100644 --- a/lib/Target/ARM/ARMBaseRegisterInfo.cpp +++ b/lib/Target/ARM/ARMBaseRegisterInfo.cpp @@ -1605,11 +1605,14 @@ bool ARMBaseRegisterInfo::isFrameOffsetLegal(const MachineInstr *MI, } Offset += getFrameIndexInstrOffset(MI, i); - assert((Offset & (Scale-1)) == 0 && "Can't encode this offset!"); + // Make sure the offset is encodable for instructions that scale the + // immediate. + if ((Offset & (Scale-1)) != 0) + return false; + if (isSigned && Offset < 0) Offset = -Offset; - unsigned Mask = (1 << NumBits) - 1; if ((unsigned)Offset <= Mask * Scale) return true; |