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 | e40d89e | 2015-07-21 00:18:59 +0000 | [diff] [blame] | 8 | define i32* @wrong-t2stmia-size-reduction(i32* %addr, i32 %val0, i32 %val1) 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 |
Matthias Braun | e40d89e | 2015-07-21 00:18:59 +0000 | [diff] [blame] | 11 | %addr2 = getelementptr i32, i32* %addr, i32 2 |
Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 12 | %lr = call i8* @llvm.returnaddress(i32 0) |
| 13 | %lr32 = ptrtoint i8* %lr to i32 |
Matthias Braun | e40d89e | 2015-07-21 00:18:59 +0000 | [diff] [blame] | 14 | store i32 %val1, i32* %addr1 |
| 15 | store i32 %lr32, i32* %addr2 |
| 16 | |
| 17 | %addr3 = getelementptr i32, i32* %addr, i32 3 |
| 18 | ret i32* %addr3 |
Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 19 | } |
| 20 | |
Matthias Braun | e40d89e | 2015-07-21 00:18:59 +0000 | [diff] [blame] | 21 | ; Check that stm writes three registers. The bug caused one of registers (LR, |
Tim Northover | ba1d704 | 2014-09-10 12:53:28 +0000 | [diff] [blame] | 22 | ; which invalid for Thumb1 form of STMIA instruction) to be dropped. |
Matthias Braun | e40d89e | 2015-07-21 00:18:59 +0000 | [diff] [blame] | 23 | ; CHECK-LABEL: wrong-t2stmia-size-reduction: |
| 24 | ; CHECK: stm{{[^,]*}}, {{{.*,.*,.*}}} |