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