forked from OSchip/llvm-project
31 lines
1.3 KiB
LLVM
31 lines
1.3 KiB
LLVM
|
; REQUIRES: asserts
|
||
|
; RUN: llc -mtriple=thumbv7-none-linux-gnueabi -debug -o /dev/null < %s 2>&1 | FileCheck %s
|
||
|
|
||
|
; This test makes sure spills of 64-bit pairs in Thumb mode actually
|
||
|
; generate thumb instructions. Previously we were inserting an ARM
|
||
|
; STMIA which happened to have the same encoding.
|
||
|
|
||
|
define void @foo(i64* %addr) {
|
||
|
%val1 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val2 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val3 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val4 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val5 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val6 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
%val7 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(i64* %addr)
|
||
|
|
||
|
; Make sure we are actually creating the Thumb versions of the spill
|
||
|
; instructions.
|
||
|
; CHECK: t2STRDi8
|
||
|
; CHECK: t2LDRDi8
|
||
|
|
||
|
store volatile i64 %val1, i64* %addr
|
||
|
store volatile i64 %val2, i64* %addr
|
||
|
store volatile i64 %val3, i64* %addr
|
||
|
store volatile i64 %val4, i64* %addr
|
||
|
store volatile i64 %val5, i64* %addr
|
||
|
store volatile i64 %val6, i64* %addr
|
||
|
store volatile i64 %val7, i64* %addr
|
||
|
ret void
|
||
|
}
|