xref: /llvm-project/llvm/test/CodeGen/ARM/gpr-paired-spill-thumbinst.ll (revision bed1c7f061aa12417aa081e334afdba45767b938)
1; REQUIRES: asserts
2; RUN: llc -mtriple=thumbv7-none-linux-gnueabi -debug -o /dev/null < %s 2>&1 | FileCheck %s
3
4; This test makes sure spills of 64-bit pairs in Thumb mode actually
5; generate thumb instructions. Previously we were inserting an ARM
6; STMIA which happened to have the same encoding.
7
8define void @foo(ptr %addr) {
9  %val1 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
10  %val2 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
11  %val3 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
12  %val4 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
13  %val5 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
14  %val6 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
15  %val7 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [r0]", "=&r,r"(ptr %addr)
16
17  ; Make sure we are actually creating the Thumb versions of the spill
18  ; instructions.
19; CHECK: t2STRDi8
20; CHECK: t2LDRDi8
21
22  store volatile i64 %val1, ptr %addr
23  store volatile i64 %val2, ptr %addr
24  store volatile i64 %val3, ptr %addr
25  store volatile i64 %val4, ptr %addr
26  store volatile i64 %val5, ptr %addr
27  store volatile i64 %val6, ptr %addr
28  store volatile i64 %val7, ptr %addr
29  ret void
30}
31