mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
ARM: don't size-reduce STMs using the LR register.
The only Thumb-1 multi-store capable of using LR is the PUSH instruction, which translates to STMDB, so we shouldn't convert STMIAs. Patch by Sergey Dmitrouk. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217498 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b3a86a097b
commit
01dbae1163
@ -335,7 +335,7 @@ static bool VerifyLowRegs(MachineInstr *MI) {
|
||||
bool isPCOk = (Opc == ARM::t2LDMIA_RET || Opc == ARM::t2LDMIA ||
|
||||
Opc == ARM::t2LDMDB || Opc == ARM::t2LDMIA_UPD ||
|
||||
Opc == ARM::t2LDMDB_UPD);
|
||||
bool isLROk = (Opc == ARM::t2STMIA_UPD || Opc == ARM::t2STMDB_UPD);
|
||||
bool isLROk = (Opc == ARM::t2STMDB_UPD);
|
||||
bool isSPOk = isPCOk || isLROk;
|
||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = MI->getOperand(i);
|
||||
|
20
test/CodeGen/ARM/wrong-t2stmia-size-opt.ll
Normal file
20
test/CodeGen/ARM/wrong-t2stmia-size-opt.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: llc -mcpu=cortex-a9 -O1 -filetype=obj %s -o - | llvm-objdump -arch thumb -mcpu=cortex-a9 -d - | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "thumbv7--linux-gnueabi"
|
||||
|
||||
declare i8* @llvm.returnaddress(i32)
|
||||
|
||||
define i32* @wrong-t2stmia-size-reduction(i32* %addr, i32 %val0) minsize {
|
||||
store i32 %val0, i32* %addr
|
||||
%addr1 = getelementptr i32* %addr, i32 1
|
||||
%lr = call i8* @llvm.returnaddress(i32 0)
|
||||
%lr32 = ptrtoint i8* %lr to i32
|
||||
store i32 %lr32, i32* %addr1
|
||||
%addr2 = getelementptr i32* %addr1, i32 1
|
||||
ret i32* %addr2
|
||||
}
|
||||
|
||||
; Check that stm writes two registers. The bug caused one of registers (LR,
|
||||
; which invalid for Thumb1 form of STMIA instruction) to be dropped.
|
||||
; CHECK: stm{{[^,]*}}, {{{.*,.*}}}
|
Loading…
Reference in New Issue
Block a user