| Matthias Braun | f351821 | 2015-06-26 00:26:46 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=thumbv7-- -mcpu=cortex-a9 -O1 -filetype=obj %s -o - | llvm-objdump -triple=thumbv7-- -mcpu=cortex-a9 -d - | FileCheck %s |
| Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 2 | |
| 3 | 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" |
| 4 | target triple = "thumbv7--linux-gnueabi" |
| 5 | |
| 6 | declare i8* @llvm.returnaddress(i32) |
| 7 | |
| Matthias Braun | 731e359 | 2015-07-20 23:17:20 +0000 | [diff] [blame] | 8 | define i32* @wrong-t2stmia-size-reduction(i32* %addr, i32 %val0) minsize { |
| Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 9 | store i32 %val0, i32* %addr |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 10 | %addr1 = getelementptr i32, i32* %addr, i32 1 |
| Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 11 | %lr = call i8* @llvm.returnaddress(i32 0) |
| 12 | %lr32 = ptrtoint i8* %lr to i32 |
| Matthias Braun | 731e359 | 2015-07-20 23:17:20 +0000 | [diff] [blame] | 13 | store i32 %lr32, i32* %addr1 |
| 14 | %addr2 = getelementptr i32, i32* %addr1, i32 1 |
| 15 | ret i32* %addr2 |
| Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 16 | } |
| 17 | |
| Matthias Braun | 731e359 | 2015-07-20 23:17:20 +0000 | [diff] [blame] | 18 | ; Check that stm writes two registers. The bug caused one of registers (LR, |
| Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 19 | ; which invalid for Thumb1 form of STMIA instruction) to be dropped. |
| Matthias Braun | 731e359 | 2015-07-20 23:17:20 +0000 | [diff] [blame] | 20 | ; CHECK: stm{{[^,]*}}, {{{.*,.*}}} |