1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm-linux-gnueabi -mattr=+vfp2 | FileCheck %s -check-prefix=ELF 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm-apple-darwin -mattr=+vfp2 | FileCheck %s -check-prefix=DARWIN 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i32 %a, i64 %b) { 5*9880d681SAndroid Build Coastguard Worker; ELF-LABEL: f1: 6*9880d681SAndroid Build Coastguard Worker; ELF: mov r0, r2 7*9880d681SAndroid Build Coastguard Worker; DARWIN-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; DARWIN: mov r0, r1 9*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @g1(i64 %b) 10*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; test that allocating the double to r2/r3 makes r1 unavailable on gnueabi. 14*9880d681SAndroid Build Coastguard Workerdefine i32 @f2() nounwind optsize { 15*9880d681SAndroid Build Coastguard Worker; ELF-LABEL: f2: 16*9880d681SAndroid Build Coastguard Worker; ELF: mov [[REGISTER:(r[0-9]+)]], #128 17*9880d681SAndroid Build Coastguard Worker; ELF: str [[REGISTER]], [ 18*9880d681SAndroid Build Coastguard Worker; DARWIN-LABEL: f2: 19*9880d681SAndroid Build Coastguard Worker; DARWIN: mov r3, #128 20*9880d681SAndroid Build Coastguard Workerentry: 21*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 (i32, ...) @g2(i32 5, double 1.600000e+01, i32 128) nounwind optsize ; <i32> [#uses=1] 22*9880d681SAndroid Build Coastguard Worker %not. = icmp ne i32 %0, 128 ; <i1> [#uses=1] 23*9880d681SAndroid Build Coastguard Worker %.0 = zext i1 %not. to i32 ; <i32> [#uses=1] 24*9880d681SAndroid Build Coastguard Worker ret i32 %.0 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; test that on gnueabi a 64 bit value at this position will cause r3 to go 28*9880d681SAndroid Build Coastguard Worker; unused and the value stored in [sp] 29*9880d681SAndroid Build Coastguard Worker; ELF-LABEL: f3: 30*9880d681SAndroid Build Coastguard Worker; ELF: ldr r0, [sp] 31*9880d681SAndroid Build Coastguard Worker; ELF-NEXT: mov pc, lr 32*9880d681SAndroid Build Coastguard Worker; DARWIN-LABEL: f3: 33*9880d681SAndroid Build Coastguard Worker; DARWIN: mov r0, r3 34*9880d681SAndroid Build Coastguard Worker; DARWIN-NEXT: mov pc, lr 35*9880d681SAndroid Build Coastguard Workerdefine i32 @f3(i32 %i, i32 %j, i32 %k, i64 %l, ...) { 36*9880d681SAndroid Build Coastguard Workerentry: 37*9880d681SAndroid Build Coastguard Worker %0 = trunc i64 %l to i32 38*9880d681SAndroid Build Coastguard Worker ret i32 %0 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdeclare i32 @g1(i64) 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdeclare i32 @g2(i32 %i, ...) 44