xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/func-argpassing-endian.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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