1*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=arm-eabi -mattr=v7,neon | FileCheck --check-prefix=CHECK --check-prefix=CHECK-LE %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=armeb-eabi -mattr=v7,neon | FileCheck --check-prefix=CHECK --check-prefix=CHECK-BE %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@var32 = global i32 0 5*9880d681SAndroid Build Coastguard Worker@vardouble = global double 0.0 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @arg_longint( i64 %val ) { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_longint: 9*9880d681SAndroid Build Coastguard Worker; CHECK-LE: str r0, [r1] 10*9880d681SAndroid Build Coastguard Worker; CHECK-BE: str r1, [r0] 11*9880d681SAndroid Build Coastguard Worker %tmp = trunc i64 %val to i32 12*9880d681SAndroid Build Coastguard Worker store i32 %tmp, i32* @var32 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine void @arg_double( double %val ) { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_double: 18*9880d681SAndroid Build Coastguard Worker; CHECK: strd r0, r1, [r2] 19*9880d681SAndroid Build Coastguard Worker store double %val, double* @vardouble 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine void @arg_v4i32(<4 x i32> %vec ) { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_v4i32: 25*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov {{d[0-9]+}}, r2, r3 26*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov [[ARG_V4I32_REG:d[0-9]+]], r0, r1 27*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov {{d[0-9]+}}, r3, r2 28*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov [[ARG_V4I32_REG:d[0-9]+]], r1, r0 29*9880d681SAndroid Build Coastguard Worker; CHECK: vst1.32 {[[ARG_V4I32_REG]][0]}, [r0:32] 30*9880d681SAndroid Build Coastguard Worker %tmp = extractelement <4 x i32> %vec, i32 0 31*9880d681SAndroid Build Coastguard Worker store i32 %tmp, i32* @var32 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine void @arg_v2f64(<2 x double> %vec ) { 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_v2f64: 37*9880d681SAndroid Build Coastguard Worker; CHECK: strd r0, r1, [r2] 38*9880d681SAndroid Build Coastguard Worker %tmp = extractelement <2 x double> %vec, i32 0 39*9880d681SAndroid Build Coastguard Worker store double %tmp, double* @vardouble 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine i64 @return_longint() { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: return_longint: 45*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mov r0, #42 46*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mov r1, #0 47*9880d681SAndroid Build Coastguard Worker; CHECK-BE: mov r0, #0 48*9880d681SAndroid Build Coastguard Worker; CHECK-BE: mov r1, #42 49*9880d681SAndroid Build Coastguard Worker ret i64 42 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine double @return_double() { 53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: return_double: 54*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r0, r1, {{d[0-9]+}} 55*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r1, r0, {{d[0-9]+}} 56*9880d681SAndroid Build Coastguard Worker ret double 1.0 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @return_v4i32() { 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: return_v4i32: 61*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r0, r1, {{d[0-9]+}} 62*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r2, r3, {{d[0-9]+}} 63*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r1, r0, {{d[0-9]+}} 64*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r3, r2, {{d[0-9]+}} 65*9880d681SAndroid Build Coastguard Worker ret < 4 x i32> < i32 42, i32 43, i32 44, i32 45 > 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @return_v2f64() { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: return_v2f64: 70*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r0, r1, {{d[0-9]+}} 71*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r2, r3, {{d[0-9]+}} 72*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r1, r0, {{d[0-9]+}} 73*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r3, r2, {{d[0-9]+}} 74*9880d681SAndroid Build Coastguard Worker ret <2 x double> < double 3.14, double 6.28 > 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine void @caller_arg_longint() { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: caller_arg_longint: 79*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mov r0, #42 80*9880d681SAndroid Build Coastguard Worker; CHECK-LE: mov r1, #0 81*9880d681SAndroid Build Coastguard Worker; CHECK-BE: mov r0, #0 82*9880d681SAndroid Build Coastguard Worker; CHECK-BE: mov r1, #42 83*9880d681SAndroid Build Coastguard Worker call void @arg_longint( i64 42 ) 84*9880d681SAndroid Build Coastguard Worker ret void 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine void @caller_arg_double() { 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: caller_arg_double: 89*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov r0, r1, {{d[0-9]+}} 90*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov r1, r0, {{d[0-9]+}} 91*9880d681SAndroid Build Coastguard Worker call void @arg_double( double 1.0 ) 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine void @caller_return_longint() { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: caller_return_longint: 97*9880d681SAndroid Build Coastguard Worker; CHECK-LE: str r0, [r1] 98*9880d681SAndroid Build Coastguard Worker; CHECK-BE: str r1, [r0] 99*9880d681SAndroid Build Coastguard Worker %val = call i64 @return_longint() 100*9880d681SAndroid Build Coastguard Worker %tmp = trunc i64 %val to i32 101*9880d681SAndroid Build Coastguard Worker store i32 %tmp, i32* @var32 102*9880d681SAndroid Build Coastguard Worker ret void 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine void @caller_return_double() { 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: caller_return_double: 107*9880d681SAndroid Build Coastguard Worker; CHECK-LE: vmov {{d[0-9]+}}, r0, r1 108*9880d681SAndroid Build Coastguard Worker; CHECK-BE: vmov {{d[0-9]+}}, r1, r0 109*9880d681SAndroid Build Coastguard Worker %val = call double @return_double( ) 110*9880d681SAndroid Build Coastguard Worker %tmp = fadd double %val, 3.14 111*9880d681SAndroid Build Coastguard Worker store double %tmp, double* @vardouble 112*9880d681SAndroid Build Coastguard Worker ret void 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine void @caller_return_v2f64() { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: caller_return_v2f64: 117*9880d681SAndroid Build Coastguard Worker; CHECK: strd r0, r1, [r2] 118*9880d681SAndroid Build Coastguard Worker %val = call <2 x double> @return_v2f64( ) 119*9880d681SAndroid Build Coastguard Worker %tmp = extractelement <2 x double> %val, i32 0 120*9880d681SAndroid Build Coastguard Worker store double %tmp, double* @vardouble 121*9880d681SAndroid Build Coastguard Worker ret void 122*9880d681SAndroid Build Coastguard Worker} 123