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