xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/msa/2r.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test the MSA intrinsics that are encoded with the 2R instruction format.
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
7*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nloc_b_test() nounwind {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %0 = load <16 x i8>, <16 x i8>* @llvm_mips_nloc_b_ARG1
12*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.mips.nloc.b(<16 x i8> %0)
13*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %1, <16 x i8>* @llvm_mips_nloc_b_RES
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.mips.nloc.b(<16 x i8>) nounwind
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nloc_b_test:
20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nloc_b_ARG1)
21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nloc.b [[WD:\$w[0-9]+]], [[WS]]
23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nloc_b_RES)
24*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.b [[WD]], 0([[R2]])
25*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nloc_b_test
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
28*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nloc_h_test() nounwind {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = load <8 x i16>, <8 x i16>* @llvm_mips_nloc_h_ARG1
33*9880d681SAndroid Build Coastguard Worker  %1 = tail call <8 x i16> @llvm.mips.nloc.h(<8 x i16> %0)
34*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %1, <8 x i16>* @llvm_mips_nloc_h_RES
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.mips.nloc.h(<8 x i16>) nounwind
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nloc_h_test:
41*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nloc_h_ARG1)
42*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
43*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nloc.h [[WD:\$w[0-9]+]], [[WS]]
44*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nloc_h_RES)
45*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.h [[WD]], 0([[R2]])
46*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nloc_h_test
47*9880d681SAndroid Build Coastguard Worker;
48*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
49*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nloc_w_test() nounwind {
52*9880d681SAndroid Build Coastguard Workerentry:
53*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x i32>, <4 x i32>* @llvm_mips_nloc_w_ARG1
54*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.mips.nloc.w(<4 x i32> %0)
55*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %1, <4 x i32>* @llvm_mips_nloc_w_RES
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.mips.nloc.w(<4 x i32>) nounwind
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nloc_w_test:
62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nloc_w_ARG1)
63*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
64*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nloc.w [[WD:\$w[0-9]+]], [[WS]]
65*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nloc_w_RES)
66*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
67*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nloc_w_test
68*9880d681SAndroid Build Coastguard Worker;
69*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
70*9880d681SAndroid Build Coastguard Worker@llvm_mips_nloc_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nloc_d_test() nounwind {
73*9880d681SAndroid Build Coastguard Workerentry:
74*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x i64>, <2 x i64>* @llvm_mips_nloc_d_ARG1
75*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x i64> @llvm.mips.nloc.d(<2 x i64> %0)
76*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %1, <2 x i64>* @llvm_mips_nloc_d_RES
77*9880d681SAndroid Build Coastguard Worker  ret void
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.mips.nloc.d(<2 x i64>) nounwind
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nloc_d_test:
83*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nloc_d_ARG1)
84*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
85*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nloc.d [[WD:\$w[0-9]+]], [[WS]]
86*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nloc_d_RES)
87*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
88*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nloc_d_test
89*9880d681SAndroid Build Coastguard Worker;
90*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
91*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nlzc_b_test() nounwind {
94*9880d681SAndroid Build Coastguard Workerentry:
95*9880d681SAndroid Build Coastguard Worker  %0 = load <16 x i8>, <16 x i8>* @llvm_mips_nlzc_b_ARG1
96*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.mips.nlzc.b(<16 x i8> %0)
97*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %1, <16 x i8>* @llvm_mips_nlzc_b_RES
98*9880d681SAndroid Build Coastguard Worker  ret void
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.mips.nlzc.b(<16 x i8>) nounwind
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nlzc_b_test:
104*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nlzc_b_ARG1)
105*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
106*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nlzc.b [[WD:\$w[0-9]+]], [[WS]]
107*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nlzc_b_RES)
108*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.b [[WD]], 0([[R2]])
109*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nlzc_b_test
110*9880d681SAndroid Build Coastguard Worker;
111*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
112*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nlzc_h_test() nounwind {
115*9880d681SAndroid Build Coastguard Workerentry:
116*9880d681SAndroid Build Coastguard Worker  %0 = load <8 x i16>, <8 x i16>* @llvm_mips_nlzc_h_ARG1
117*9880d681SAndroid Build Coastguard Worker  %1 = tail call <8 x i16> @llvm.mips.nlzc.h(<8 x i16> %0)
118*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %1, <8 x i16>* @llvm_mips_nlzc_h_RES
119*9880d681SAndroid Build Coastguard Worker  ret void
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.mips.nlzc.h(<8 x i16>) nounwind
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nlzc_h_test:
125*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nlzc_h_ARG1)
126*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
127*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nlzc.h [[WD:\$w[0-9]+]], [[WS]]
128*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nlzc_h_RES)
129*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.h [[WD]], 0([[R2]])
130*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nlzc_h_test
131*9880d681SAndroid Build Coastguard Worker;
132*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
133*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nlzc_w_test() nounwind {
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x i32>, <4 x i32>* @llvm_mips_nlzc_w_ARG1
138*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.mips.nlzc.w(<4 x i32> %0)
139*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %1, <4 x i32>* @llvm_mips_nlzc_w_RES
140*9880d681SAndroid Build Coastguard Worker  ret void
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.mips.nlzc.w(<4 x i32>) nounwind
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nlzc_w_test:
146*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nlzc_w_ARG1)
147*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
148*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nlzc.w [[WD:\$w[0-9]+]], [[WS]]
149*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nlzc_w_RES)
150*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
151*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nlzc_w_test
152*9880d681SAndroid Build Coastguard Worker;
153*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
154*9880d681SAndroid Build Coastguard Worker@llvm_mips_nlzc_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_nlzc_d_test() nounwind {
157*9880d681SAndroid Build Coastguard Workerentry:
158*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x i64>, <2 x i64>* @llvm_mips_nlzc_d_ARG1
159*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x i64> @llvm.mips.nlzc.d(<2 x i64> %0)
160*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %1, <2 x i64>* @llvm_mips_nlzc_d_RES
161*9880d681SAndroid Build Coastguard Worker  ret void
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.mips.nlzc.d(<2 x i64>) nounwind
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_nlzc_d_test:
167*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_nlzc_d_ARG1)
168*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
169*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: nlzc.d [[WD:\$w[0-9]+]], [[WS]]
170*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_nlzc_d_RES)
171*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
172*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_nlzc_d_test
173*9880d681SAndroid Build Coastguard Worker;
174*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
175*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_pcnt_b_test() nounwind {
178*9880d681SAndroid Build Coastguard Workerentry:
179*9880d681SAndroid Build Coastguard Worker  %0 = load <16 x i8>, <16 x i8>* @llvm_mips_pcnt_b_ARG1
180*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.mips.pcnt.b(<16 x i8> %0)
181*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %1, <16 x i8>* @llvm_mips_pcnt_b_RES
182*9880d681SAndroid Build Coastguard Worker  ret void
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.mips.pcnt.b(<16 x i8>) nounwind
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_pcnt_b_test:
188*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_pcnt_b_ARG1)
189*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
190*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: pcnt.b [[WD:\$w[0-9]+]], [[WS]]
191*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_pcnt_b_RES)
192*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.b [[WD]], 0([[R2]])
193*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_pcnt_b_test
194*9880d681SAndroid Build Coastguard Worker;
195*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
196*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_pcnt_h_test() nounwind {
199*9880d681SAndroid Build Coastguard Workerentry:
200*9880d681SAndroid Build Coastguard Worker  %0 = load <8 x i16>, <8 x i16>* @llvm_mips_pcnt_h_ARG1
201*9880d681SAndroid Build Coastguard Worker  %1 = tail call <8 x i16> @llvm.mips.pcnt.h(<8 x i16> %0)
202*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %1, <8 x i16>* @llvm_mips_pcnt_h_RES
203*9880d681SAndroid Build Coastguard Worker  ret void
204*9880d681SAndroid Build Coastguard Worker}
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.mips.pcnt.h(<8 x i16>) nounwind
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_pcnt_h_test:
209*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_pcnt_h_ARG1)
210*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
211*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: pcnt.h [[WD:\$w[0-9]+]], [[WS]]
212*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_pcnt_h_RES)
213*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.h [[WD]], 0([[R2]])
214*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_pcnt_h_test
215*9880d681SAndroid Build Coastguard Worker;
216*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
217*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_pcnt_w_test() nounwind {
220*9880d681SAndroid Build Coastguard Workerentry:
221*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x i32>, <4 x i32>* @llvm_mips_pcnt_w_ARG1
222*9880d681SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.mips.pcnt.w(<4 x i32> %0)
223*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %1, <4 x i32>* @llvm_mips_pcnt_w_RES
224*9880d681SAndroid Build Coastguard Worker  ret void
225*9880d681SAndroid Build Coastguard Worker}
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.mips.pcnt.w(<4 x i32>) nounwind
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_pcnt_w_test:
230*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_pcnt_w_ARG1)
231*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
232*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: pcnt.w [[WD:\$w[0-9]+]], [[WS]]
233*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_pcnt_w_RES)
234*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]])
235*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_pcnt_w_test
236*9880d681SAndroid Build Coastguard Worker;
237*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
238*9880d681SAndroid Build Coastguard Worker@llvm_mips_pcnt_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_pcnt_d_test() nounwind {
241*9880d681SAndroid Build Coastguard Workerentry:
242*9880d681SAndroid Build Coastguard Worker  %0 = load <2 x i64>, <2 x i64>* @llvm_mips_pcnt_d_ARG1
243*9880d681SAndroid Build Coastguard Worker  %1 = tail call <2 x i64> @llvm.mips.pcnt.d(<2 x i64> %0)
244*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %1, <2 x i64>* @llvm_mips_pcnt_d_RES
245*9880d681SAndroid Build Coastguard Worker  ret void
246*9880d681SAndroid Build Coastguard Worker}
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.mips.pcnt.d(<2 x i64>) nounwind
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_pcnt_d_test:
251*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_pcnt_d_ARG1)
252*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
253*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: pcnt.d [[WD:\$w[0-9]+]], [[WS]]
254*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_pcnt_d_RES)
255*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]])
256*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_pcnt_d_test
257*9880d681SAndroid Build Coastguard Worker;
258