forked from OSchip/llvm-project
ARM: allow misaligned local variables in Thumb1 mode.
There's no hard requirement on LLVM to align local variable to 32-bits, so the Thumb1 frame handling needs to be able to deal with variables that are only naturally aligned without falling over. llvm-svn: 219733
This commit is contained in:
parent
2f448467e4
commit
9a4c043d67
|
@ -364,8 +364,6 @@ rewriteFrameIndex(MachineBasicBlock::iterator II, unsigned FrameRegIdx,
|
|||
} else {
|
||||
NumBits = 8;
|
||||
Scale = 4;
|
||||
assert((Offset & 3) == 0 &&
|
||||
"Thumb add/sub sp, #imm immediate must be multiple of 4!");
|
||||
}
|
||||
|
||||
unsigned PredReg;
|
||||
|
@ -380,7 +378,7 @@ rewriteFrameIndex(MachineBasicBlock::iterator II, unsigned FrameRegIdx,
|
|||
|
||||
// Common case: small offset, fits into instruction.
|
||||
unsigned Mask = (1 << NumBits) - 1;
|
||||
if (((Offset / Scale) & ~Mask) == 0) {
|
||||
if (Offset % Scale == 0 && ((Offset / Scale) & ~Mask) == 0) {
|
||||
// Replace the FrameIndex with sp / fp
|
||||
if (Opcode == ARM::tADDi3) {
|
||||
MI.setDesc(TII.get(Opcode));
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
; RUN: llc < %s -mtriple=thumbv6-apple-ios -verify-machineinstrs -mcpu=cortex-m0 | FileCheck %s --check-prefix=CHECK-M0
|
||||
; RUN: llc < %s -mtriple=thumbv7--none-eabi -thread-model single -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-BAREMETAL
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
|
||||
define void @func(i32 %argc, i8** %argv) nounwind {
|
||||
entry:
|
||||
%argc.addr = alloca i32 ; <i32*> [#uses=1]
|
||||
|
|
Loading…
Reference in New Issue