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