OLD | NEW |
1 ; This test checks support for vector arithmetic. | 1 ; This test checks support for vector arithmetic. |
2 | 2 |
3 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 \ | 3 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 \ |
4 ; RUN: | FileCheck %s | 4 ; RUN: | FileCheck %s |
5 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 \ | 5 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 \ |
6 ; RUN: | FileCheck %s | 6 ; RUN: | FileCheck %s |
7 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 -mattr=sse4.1 \ | 7 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 -mattr=sse4.1 \ |
8 ; RUN: | FileCheck --check-prefix=SSE41 %s | 8 ; RUN: | FileCheck --check-prefix=SSE41 %s |
9 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 -mattr=sse4.1 \ | 9 ; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 -mattr=sse4.1 \ |
10 ; RUN: | FileCheck --check-prefix=SSE41 %s | 10 ; RUN: | FileCheck --check-prefix=SSE41 %s |
11 | 11 |
12 define <4 x float> @test_fadd(<4 x float> %arg0, <4 x float> %arg1) { | 12 define internal <4 x float> @test_fadd(<4 x float> %arg0, <4 x float> %arg1) { |
13 entry: | 13 entry: |
14 %res = fadd <4 x float> %arg0, %arg1 | 14 %res = fadd <4 x float> %arg0, %arg1 |
15 ret <4 x float> %res | 15 ret <4 x float> %res |
16 ; CHECK-LABEL: test_fadd | 16 ; CHECK-LABEL: test_fadd |
17 ; CHECK: addps | 17 ; CHECK: addps |
18 } | 18 } |
19 | 19 |
20 define <4 x float> @test_fsub(<4 x float> %arg0, <4 x float> %arg1) { | 20 define internal <4 x float> @test_fsub(<4 x float> %arg0, <4 x float> %arg1) { |
21 entry: | 21 entry: |
22 %res = fsub <4 x float> %arg0, %arg1 | 22 %res = fsub <4 x float> %arg0, %arg1 |
23 ret <4 x float> %res | 23 ret <4 x float> %res |
24 ; CHECK-LABEL: test_fsub | 24 ; CHECK-LABEL: test_fsub |
25 ; CHECK: subps | 25 ; CHECK: subps |
26 } | 26 } |
27 | 27 |
28 define <4 x float> @test_fmul(<4 x float> %arg0, <4 x float> %arg1) { | 28 define internal <4 x float> @test_fmul(<4 x float> %arg0, <4 x float> %arg1) { |
29 entry: | 29 entry: |
30 %res = fmul <4 x float> %arg0, %arg1 | 30 %res = fmul <4 x float> %arg0, %arg1 |
31 ret <4 x float> %res | 31 ret <4 x float> %res |
32 ; CHECK-LABEL: test_fmul | 32 ; CHECK-LABEL: test_fmul |
33 ; CHECK: mulps | 33 ; CHECK: mulps |
34 } | 34 } |
35 | 35 |
36 define <4 x float> @test_fdiv(<4 x float> %arg0, <4 x float> %arg1) { | 36 define internal <4 x float> @test_fdiv(<4 x float> %arg0, <4 x float> %arg1) { |
37 entry: | 37 entry: |
38 %res = fdiv <4 x float> %arg0, %arg1 | 38 %res = fdiv <4 x float> %arg0, %arg1 |
39 ret <4 x float> %res | 39 ret <4 x float> %res |
40 ; CHECK-LABEL: test_fdiv | 40 ; CHECK-LABEL: test_fdiv |
41 ; CHECK: divps | 41 ; CHECK: divps |
42 } | 42 } |
43 | 43 |
44 define <4 x float> @test_frem(<4 x float> %arg0, <4 x float> %arg1) { | 44 define internal <4 x float> @test_frem(<4 x float> %arg0, <4 x float> %arg1) { |
45 entry: | 45 entry: |
46 %res = frem <4 x float> %arg0, %arg1 | 46 %res = frem <4 x float> %arg0, %arg1 |
47 ret <4 x float> %res | 47 ret <4 x float> %res |
48 ; CHECK-LABEL: test_frem | 48 ; CHECK-LABEL: test_frem |
49 ; CHECK: fmodf | 49 ; CHECK: fmodf |
50 ; CHECK: fmodf | 50 ; CHECK: fmodf |
51 ; CHECK: fmodf | 51 ; CHECK: fmodf |
52 ; CHECK: fmodf | 52 ; CHECK: fmodf |
53 } | 53 } |
54 | 54 |
55 define <16 x i8> @test_add_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 55 define internal <16 x i8> @test_add_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
56 entry: | 56 entry: |
57 %res = add <16 x i8> %arg0, %arg1 | 57 %res = add <16 x i8> %arg0, %arg1 |
58 ret <16 x i8> %res | 58 ret <16 x i8> %res |
59 ; CHECK-LABEL: test_add_v16i8 | 59 ; CHECK-LABEL: test_add_v16i8 |
60 ; CHECK: paddb | 60 ; CHECK: paddb |
61 } | 61 } |
62 | 62 |
63 define <16 x i8> @test_and_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 63 define internal <16 x i8> @test_and_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
64 entry: | 64 entry: |
65 %res = and <16 x i8> %arg0, %arg1 | 65 %res = and <16 x i8> %arg0, %arg1 |
66 ret <16 x i8> %res | 66 ret <16 x i8> %res |
67 ; CHECK-LABEL: test_and_v16i8 | 67 ; CHECK-LABEL: test_and_v16i8 |
68 ; CHECK: pand | 68 ; CHECK: pand |
69 } | 69 } |
70 | 70 |
71 define <16 x i8> @test_or_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 71 define internal <16 x i8> @test_or_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
72 entry: | 72 entry: |
73 %res = or <16 x i8> %arg0, %arg1 | 73 %res = or <16 x i8> %arg0, %arg1 |
74 ret <16 x i8> %res | 74 ret <16 x i8> %res |
75 ; CHECK-LABEL: test_or_v16i8 | 75 ; CHECK-LABEL: test_or_v16i8 |
76 ; CHECK: por | 76 ; CHECK: por |
77 } | 77 } |
78 | 78 |
79 define <16 x i8> @test_xor_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 79 define internal <16 x i8> @test_xor_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
80 entry: | 80 entry: |
81 %res = xor <16 x i8> %arg0, %arg1 | 81 %res = xor <16 x i8> %arg0, %arg1 |
82 ret <16 x i8> %res | 82 ret <16 x i8> %res |
83 ; CHECK-LABEL: test_xor_v16i8 | 83 ; CHECK-LABEL: test_xor_v16i8 |
84 ; CHECK: pxor | 84 ; CHECK: pxor |
85 } | 85 } |
86 | 86 |
87 define <16 x i8> @test_sub_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 87 define internal <16 x i8> @test_sub_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
88 entry: | 88 entry: |
89 %res = sub <16 x i8> %arg0, %arg1 | 89 %res = sub <16 x i8> %arg0, %arg1 |
90 ret <16 x i8> %res | 90 ret <16 x i8> %res |
91 ; CHECK-LABEL: test_sub_v16i8 | 91 ; CHECK-LABEL: test_sub_v16i8 |
92 ; CHECK: psubb | 92 ; CHECK: psubb |
93 } | 93 } |
94 | 94 |
95 define <16 x i8> @test_mul_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 95 define internal <16 x i8> @test_mul_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
96 entry: | 96 entry: |
97 %res = mul <16 x i8> %arg0, %arg1 | 97 %res = mul <16 x i8> %arg0, %arg1 |
98 ret <16 x i8> %res | 98 ret <16 x i8> %res |
99 ; CHECK-LABEL: test_mul_v16i8 | 99 ; CHECK-LABEL: test_mul_v16i8 |
100 ; CHECK: imul | 100 ; CHECK: imul |
101 ; CHECK: imul | 101 ; CHECK: imul |
102 ; CHECK: imul | 102 ; CHECK: imul |
103 ; CHECK: imul | 103 ; CHECK: imul |
104 ; CHECK: imul | 104 ; CHECK: imul |
105 ; CHECK: imul | 105 ; CHECK: imul |
106 ; CHECK: imul | 106 ; CHECK: imul |
107 ; CHECK: imul | 107 ; CHECK: imul |
108 ; CHECK: imul | 108 ; CHECK: imul |
109 ; CHECK: imul | 109 ; CHECK: imul |
110 ; CHECK: imul | 110 ; CHECK: imul |
111 ; CHECK: imul | 111 ; CHECK: imul |
112 ; CHECK: imul | 112 ; CHECK: imul |
113 ; CHECK: imul | 113 ; CHECK: imul |
114 ; CHECK: imul | 114 ; CHECK: imul |
115 ; CHECK: imul | 115 ; CHECK: imul |
116 } | 116 } |
117 | 117 |
118 define <16 x i8> @test_shl_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 118 define internal <16 x i8> @test_shl_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
119 entry: | 119 entry: |
120 %res = shl <16 x i8> %arg0, %arg1 | 120 %res = shl <16 x i8> %arg0, %arg1 |
121 ret <16 x i8> %res | 121 ret <16 x i8> %res |
122 ; CHECK-LABEL: test_shl_v16i8 | 122 ; CHECK-LABEL: test_shl_v16i8 |
123 ; CHECK: shl | 123 ; CHECK: shl |
124 ; CHECK: shl | 124 ; CHECK: shl |
125 ; CHECK: shl | 125 ; CHECK: shl |
126 ; CHECK: shl | 126 ; CHECK: shl |
127 ; CHECK: shl | 127 ; CHECK: shl |
128 ; CHECK: shl | 128 ; CHECK: shl |
129 ; CHECK: shl | 129 ; CHECK: shl |
130 ; CHECK: shl | 130 ; CHECK: shl |
131 ; CHECK: shl | 131 ; CHECK: shl |
132 ; CHECK: shl | 132 ; CHECK: shl |
133 ; CHECK: shl | 133 ; CHECK: shl |
134 ; CHECK: shl | 134 ; CHECK: shl |
135 ; CHECK: shl | 135 ; CHECK: shl |
136 ; CHECK: shl | 136 ; CHECK: shl |
137 ; CHECK: shl | 137 ; CHECK: shl |
138 ; CHECK: shl | 138 ; CHECK: shl |
139 } | 139 } |
140 | 140 |
141 define <16 x i8> @test_lshr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 141 define internal <16 x i8> @test_lshr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
142 entry: | 142 entry: |
143 %res = lshr <16 x i8> %arg0, %arg1 | 143 %res = lshr <16 x i8> %arg0, %arg1 |
144 ret <16 x i8> %res | 144 ret <16 x i8> %res |
145 ; CHECK-LABEL: test_lshr_v16i8 | 145 ; CHECK-LABEL: test_lshr_v16i8 |
146 ; CHECK: shr | 146 ; CHECK: shr |
147 ; CHECK: shr | 147 ; CHECK: shr |
148 ; CHECK: shr | 148 ; CHECK: shr |
149 ; CHECK: shr | 149 ; CHECK: shr |
150 ; CHECK: shr | 150 ; CHECK: shr |
151 ; CHECK: shr | 151 ; CHECK: shr |
152 ; CHECK: shr | 152 ; CHECK: shr |
153 ; CHECK: shr | 153 ; CHECK: shr |
154 ; CHECK: shr | 154 ; CHECK: shr |
155 ; CHECK: shr | 155 ; CHECK: shr |
156 ; CHECK: shr | 156 ; CHECK: shr |
157 ; CHECK: shr | 157 ; CHECK: shr |
158 ; CHECK: shr | 158 ; CHECK: shr |
159 ; CHECK: shr | 159 ; CHECK: shr |
160 ; CHECK: shr | 160 ; CHECK: shr |
161 ; CHECK: shr | 161 ; CHECK: shr |
162 } | 162 } |
163 | 163 |
164 define <16 x i8> @test_ashr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 164 define internal <16 x i8> @test_ashr_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
165 entry: | 165 entry: |
166 %res = ashr <16 x i8> %arg0, %arg1 | 166 %res = ashr <16 x i8> %arg0, %arg1 |
167 ret <16 x i8> %res | 167 ret <16 x i8> %res |
168 ; CHECK-LABEL: test_ashr_v16i8 | 168 ; CHECK-LABEL: test_ashr_v16i8 |
169 ; CHECK: sar | 169 ; CHECK: sar |
170 ; CHECK: sar | 170 ; CHECK: sar |
171 ; CHECK: sar | 171 ; CHECK: sar |
172 ; CHECK: sar | 172 ; CHECK: sar |
173 ; CHECK: sar | 173 ; CHECK: sar |
174 ; CHECK: sar | 174 ; CHECK: sar |
175 ; CHECK: sar | 175 ; CHECK: sar |
176 ; CHECK: sar | 176 ; CHECK: sar |
177 ; CHECK: sar | 177 ; CHECK: sar |
178 ; CHECK: sar | 178 ; CHECK: sar |
179 ; CHECK: sar | 179 ; CHECK: sar |
180 ; CHECK: sar | 180 ; CHECK: sar |
181 ; CHECK: sar | 181 ; CHECK: sar |
182 ; CHECK: sar | 182 ; CHECK: sar |
183 ; CHECK: sar | 183 ; CHECK: sar |
184 ; CHECK: sar | 184 ; CHECK: sar |
185 } | 185 } |
186 | 186 |
187 define <16 x i8> @test_udiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 187 define internal <16 x i8> @test_udiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
188 entry: | 188 entry: |
189 %res = udiv <16 x i8> %arg0, %arg1 | 189 %res = udiv <16 x i8> %arg0, %arg1 |
190 ret <16 x i8> %res | 190 ret <16 x i8> %res |
191 ; CHECK-LABEL: test_udiv_v16i8 | 191 ; CHECK-LABEL: test_udiv_v16i8 |
192 ; CHECK: div | 192 ; CHECK: div |
193 ; CHECK: div | 193 ; CHECK: div |
194 ; CHECK: div | 194 ; CHECK: div |
195 ; CHECK: div | 195 ; CHECK: div |
196 ; CHECK: div | 196 ; CHECK: div |
197 ; CHECK: div | 197 ; CHECK: div |
198 ; CHECK: div | 198 ; CHECK: div |
199 ; CHECK: div | 199 ; CHECK: div |
200 ; CHECK: div | 200 ; CHECK: div |
201 ; CHECK: div | 201 ; CHECK: div |
202 ; CHECK: div | 202 ; CHECK: div |
203 ; CHECK: div | 203 ; CHECK: div |
204 ; CHECK: div | 204 ; CHECK: div |
205 ; CHECK: div | 205 ; CHECK: div |
206 ; CHECK: div | 206 ; CHECK: div |
207 ; CHECK: div | 207 ; CHECK: div |
208 } | 208 } |
209 | 209 |
210 define <16 x i8> @test_sdiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 210 define internal <16 x i8> @test_sdiv_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
211 entry: | 211 entry: |
212 %res = sdiv <16 x i8> %arg0, %arg1 | 212 %res = sdiv <16 x i8> %arg0, %arg1 |
213 ret <16 x i8> %res | 213 ret <16 x i8> %res |
214 ; CHECK-LABEL: test_sdiv_v16i8 | 214 ; CHECK-LABEL: test_sdiv_v16i8 |
215 ; CHECK: idiv | 215 ; CHECK: idiv |
216 ; CHECK: idiv | 216 ; CHECK: idiv |
217 ; CHECK: idiv | 217 ; CHECK: idiv |
218 ; CHECK: idiv | 218 ; CHECK: idiv |
219 ; CHECK: idiv | 219 ; CHECK: idiv |
220 ; CHECK: idiv | 220 ; CHECK: idiv |
221 ; CHECK: idiv | 221 ; CHECK: idiv |
222 ; CHECK: idiv | 222 ; CHECK: idiv |
223 ; CHECK: idiv | 223 ; CHECK: idiv |
224 ; CHECK: idiv | 224 ; CHECK: idiv |
225 ; CHECK: idiv | 225 ; CHECK: idiv |
226 ; CHECK: idiv | 226 ; CHECK: idiv |
227 ; CHECK: idiv | 227 ; CHECK: idiv |
228 ; CHECK: idiv | 228 ; CHECK: idiv |
229 ; CHECK: idiv | 229 ; CHECK: idiv |
230 ; CHECK: idiv | 230 ; CHECK: idiv |
231 } | 231 } |
232 | 232 |
233 define <16 x i8> @test_urem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 233 define internal <16 x i8> @test_urem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
234 entry: | 234 entry: |
235 %res = urem <16 x i8> %arg0, %arg1 | 235 %res = urem <16 x i8> %arg0, %arg1 |
236 ret <16 x i8> %res | 236 ret <16 x i8> %res |
237 ; CHECK-LABEL: test_urem_v16i8 | 237 ; CHECK-LABEL: test_urem_v16i8 |
238 ; CHECK: div | 238 ; CHECK: div |
239 ; CHECK: div | 239 ; CHECK: div |
240 ; CHECK: div | 240 ; CHECK: div |
241 ; CHECK: div | 241 ; CHECK: div |
242 ; CHECK: div | 242 ; CHECK: div |
243 ; CHECK: div | 243 ; CHECK: div |
244 ; CHECK: div | 244 ; CHECK: div |
245 ; CHECK: div | 245 ; CHECK: div |
246 ; CHECK: div | 246 ; CHECK: div |
247 ; CHECK: div | 247 ; CHECK: div |
248 ; CHECK: div | 248 ; CHECK: div |
249 ; CHECK: div | 249 ; CHECK: div |
250 ; CHECK: div | 250 ; CHECK: div |
251 ; CHECK: div | 251 ; CHECK: div |
252 ; CHECK: div | 252 ; CHECK: div |
253 ; CHECK: div | 253 ; CHECK: div |
254 } | 254 } |
255 | 255 |
256 define <16 x i8> @test_srem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { | 256 define internal <16 x i8> @test_srem_v16i8(<16 x i8> %arg0, <16 x i8> %arg1) { |
257 entry: | 257 entry: |
258 %res = srem <16 x i8> %arg0, %arg1 | 258 %res = srem <16 x i8> %arg0, %arg1 |
259 ret <16 x i8> %res | 259 ret <16 x i8> %res |
260 ; CHECK-LABEL: test_srem_v16i8 | 260 ; CHECK-LABEL: test_srem_v16i8 |
261 ; CHECK: idiv | 261 ; CHECK: idiv |
262 ; CHECK: idiv | 262 ; CHECK: idiv |
263 ; CHECK: idiv | 263 ; CHECK: idiv |
264 ; CHECK: idiv | 264 ; CHECK: idiv |
265 ; CHECK: idiv | 265 ; CHECK: idiv |
266 ; CHECK: idiv | 266 ; CHECK: idiv |
267 ; CHECK: idiv | 267 ; CHECK: idiv |
268 ; CHECK: idiv | 268 ; CHECK: idiv |
269 ; CHECK: idiv | 269 ; CHECK: idiv |
270 ; CHECK: idiv | 270 ; CHECK: idiv |
271 ; CHECK: idiv | 271 ; CHECK: idiv |
272 ; CHECK: idiv | 272 ; CHECK: idiv |
273 ; CHECK: idiv | 273 ; CHECK: idiv |
274 ; CHECK: idiv | 274 ; CHECK: idiv |
275 ; CHECK: idiv | 275 ; CHECK: idiv |
276 ; CHECK: idiv | 276 ; CHECK: idiv |
277 } | 277 } |
278 | 278 |
279 define <8 x i16> @test_add_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 279 define internal <8 x i16> @test_add_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
280 entry: | 280 entry: |
281 %res = add <8 x i16> %arg0, %arg1 | 281 %res = add <8 x i16> %arg0, %arg1 |
282 ret <8 x i16> %res | 282 ret <8 x i16> %res |
283 ; CHECK-LABEL: test_add_v8i16 | 283 ; CHECK-LABEL: test_add_v8i16 |
284 ; CHECK: paddw | 284 ; CHECK: paddw |
285 } | 285 } |
286 | 286 |
287 define <8 x i16> @test_and_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 287 define internal <8 x i16> @test_and_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
288 entry: | 288 entry: |
289 %res = and <8 x i16> %arg0, %arg1 | 289 %res = and <8 x i16> %arg0, %arg1 |
290 ret <8 x i16> %res | 290 ret <8 x i16> %res |
291 ; CHECK-LABEL: test_and_v8i16 | 291 ; CHECK-LABEL: test_and_v8i16 |
292 ; CHECK: pand | 292 ; CHECK: pand |
293 } | 293 } |
294 | 294 |
295 define <8 x i16> @test_or_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 295 define internal <8 x i16> @test_or_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
296 entry: | 296 entry: |
297 %res = or <8 x i16> %arg0, %arg1 | 297 %res = or <8 x i16> %arg0, %arg1 |
298 ret <8 x i16> %res | 298 ret <8 x i16> %res |
299 ; CHECK-LABEL: test_or_v8i16 | 299 ; CHECK-LABEL: test_or_v8i16 |
300 ; CHECK: por | 300 ; CHECK: por |
301 } | 301 } |
302 | 302 |
303 define <8 x i16> @test_xor_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 303 define internal <8 x i16> @test_xor_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
304 entry: | 304 entry: |
305 %res = xor <8 x i16> %arg0, %arg1 | 305 %res = xor <8 x i16> %arg0, %arg1 |
306 ret <8 x i16> %res | 306 ret <8 x i16> %res |
307 ; CHECK-LABEL: test_xor_v8i16 | 307 ; CHECK-LABEL: test_xor_v8i16 |
308 ; CHECK: pxor | 308 ; CHECK: pxor |
309 } | 309 } |
310 | 310 |
311 define <8 x i16> @test_sub_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 311 define internal <8 x i16> @test_sub_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
312 entry: | 312 entry: |
313 %res = sub <8 x i16> %arg0, %arg1 | 313 %res = sub <8 x i16> %arg0, %arg1 |
314 ret <8 x i16> %res | 314 ret <8 x i16> %res |
315 ; CHECK-LABEL: test_sub_v8i16 | 315 ; CHECK-LABEL: test_sub_v8i16 |
316 ; CHECK: psubw | 316 ; CHECK: psubw |
317 } | 317 } |
318 | 318 |
319 define <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 319 define internal <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
320 entry: | 320 entry: |
321 %res = mul <8 x i16> %arg0, %arg1 | 321 %res = mul <8 x i16> %arg0, %arg1 |
322 ret <8 x i16> %res | 322 ret <8 x i16> %res |
323 ; CHECK-LABEL: test_mul_v8i16 | 323 ; CHECK-LABEL: test_mul_v8i16 |
324 ; CHECK: pmullw | 324 ; CHECK: pmullw |
325 } | 325 } |
326 | 326 |
327 define <8 x i16> @test_shl_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 327 define internal <8 x i16> @test_shl_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
328 entry: | 328 entry: |
329 %res = shl <8 x i16> %arg0, %arg1 | 329 %res = shl <8 x i16> %arg0, %arg1 |
330 ret <8 x i16> %res | 330 ret <8 x i16> %res |
331 ; CHECK-LABEL: test_shl_v8i16 | 331 ; CHECK-LABEL: test_shl_v8i16 |
332 ; CHECK: shl | 332 ; CHECK: shl |
333 ; CHECK: shl | 333 ; CHECK: shl |
334 ; CHECK: shl | 334 ; CHECK: shl |
335 ; CHECK: shl | 335 ; CHECK: shl |
336 ; CHECK: shl | 336 ; CHECK: shl |
337 ; CHECK: shl | 337 ; CHECK: shl |
338 ; CHECK: shl | 338 ; CHECK: shl |
339 ; CHECK: shl | 339 ; CHECK: shl |
340 } | 340 } |
341 | 341 |
342 define <8 x i16> @test_lshr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 342 define internal <8 x i16> @test_lshr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
343 entry: | 343 entry: |
344 %res = lshr <8 x i16> %arg0, %arg1 | 344 %res = lshr <8 x i16> %arg0, %arg1 |
345 ret <8 x i16> %res | 345 ret <8 x i16> %res |
346 ; CHECK-LABEL: test_lshr_v8i16 | 346 ; CHECK-LABEL: test_lshr_v8i16 |
347 ; CHECK: shr | 347 ; CHECK: shr |
348 ; CHECK: shr | 348 ; CHECK: shr |
349 ; CHECK: shr | 349 ; CHECK: shr |
350 ; CHECK: shr | 350 ; CHECK: shr |
351 ; CHECK: shr | 351 ; CHECK: shr |
352 ; CHECK: shr | 352 ; CHECK: shr |
353 ; CHECK: shr | 353 ; CHECK: shr |
354 ; CHECK: shr | 354 ; CHECK: shr |
355 } | 355 } |
356 | 356 |
357 define <8 x i16> @test_ashr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 357 define internal <8 x i16> @test_ashr_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
358 entry: | 358 entry: |
359 %res = ashr <8 x i16> %arg0, %arg1 | 359 %res = ashr <8 x i16> %arg0, %arg1 |
360 ret <8 x i16> %res | 360 ret <8 x i16> %res |
361 ; CHECK-LABEL: test_ashr_v8i16 | 361 ; CHECK-LABEL: test_ashr_v8i16 |
362 ; CHECK: sar | 362 ; CHECK: sar |
363 ; CHECK: sar | 363 ; CHECK: sar |
364 ; CHECK: sar | 364 ; CHECK: sar |
365 ; CHECK: sar | 365 ; CHECK: sar |
366 ; CHECK: sar | 366 ; CHECK: sar |
367 ; CHECK: sar | 367 ; CHECK: sar |
368 ; CHECK: sar | 368 ; CHECK: sar |
369 ; CHECK: sar | 369 ; CHECK: sar |
370 } | 370 } |
371 | 371 |
372 define <8 x i16> @test_udiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 372 define internal <8 x i16> @test_udiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
373 entry: | 373 entry: |
374 %res = udiv <8 x i16> %arg0, %arg1 | 374 %res = udiv <8 x i16> %arg0, %arg1 |
375 ret <8 x i16> %res | 375 ret <8 x i16> %res |
376 ; CHECK-LABEL: test_udiv_v8i16 | 376 ; CHECK-LABEL: test_udiv_v8i16 |
377 ; CHECK: div | 377 ; CHECK: div |
378 ; CHECK: div | 378 ; CHECK: div |
379 ; CHECK: div | 379 ; CHECK: div |
380 ; CHECK: div | 380 ; CHECK: div |
381 ; CHECK: div | 381 ; CHECK: div |
382 ; CHECK: div | 382 ; CHECK: div |
383 ; CHECK: div | 383 ; CHECK: div |
384 ; CHECK: div | 384 ; CHECK: div |
385 } | 385 } |
386 | 386 |
387 define <8 x i16> @test_sdiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 387 define internal <8 x i16> @test_sdiv_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
388 entry: | 388 entry: |
389 %res = sdiv <8 x i16> %arg0, %arg1 | 389 %res = sdiv <8 x i16> %arg0, %arg1 |
390 ret <8 x i16> %res | 390 ret <8 x i16> %res |
391 ; CHECK-LABEL: test_sdiv_v8i16 | 391 ; CHECK-LABEL: test_sdiv_v8i16 |
392 ; CHECK: idiv | 392 ; CHECK: idiv |
393 ; CHECK: idiv | 393 ; CHECK: idiv |
394 ; CHECK: idiv | 394 ; CHECK: idiv |
395 ; CHECK: idiv | 395 ; CHECK: idiv |
396 ; CHECK: idiv | 396 ; CHECK: idiv |
397 ; CHECK: idiv | 397 ; CHECK: idiv |
398 ; CHECK: idiv | 398 ; CHECK: idiv |
399 ; CHECK: idiv | 399 ; CHECK: idiv |
400 } | 400 } |
401 | 401 |
402 define <8 x i16> @test_urem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 402 define internal <8 x i16> @test_urem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
403 entry: | 403 entry: |
404 %res = urem <8 x i16> %arg0, %arg1 | 404 %res = urem <8 x i16> %arg0, %arg1 |
405 ret <8 x i16> %res | 405 ret <8 x i16> %res |
406 ; CHECK-LABEL: test_urem_v8i16 | 406 ; CHECK-LABEL: test_urem_v8i16 |
407 ; CHECK: div | 407 ; CHECK: div |
408 ; CHECK: div | 408 ; CHECK: div |
409 ; CHECK: div | 409 ; CHECK: div |
410 ; CHECK: div | 410 ; CHECK: div |
411 ; CHECK: div | 411 ; CHECK: div |
412 ; CHECK: div | 412 ; CHECK: div |
413 ; CHECK: div | 413 ; CHECK: div |
414 ; CHECK: div | 414 ; CHECK: div |
415 } | 415 } |
416 | 416 |
417 define <8 x i16> @test_srem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 417 define internal <8 x i16> @test_srem_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
418 entry: | 418 entry: |
419 %res = srem <8 x i16> %arg0, %arg1 | 419 %res = srem <8 x i16> %arg0, %arg1 |
420 ret <8 x i16> %res | 420 ret <8 x i16> %res |
421 ; CHECK-LABEL: test_srem_v8i16 | 421 ; CHECK-LABEL: test_srem_v8i16 |
422 ; CHECK: idiv | 422 ; CHECK: idiv |
423 ; CHECK: idiv | 423 ; CHECK: idiv |
424 ; CHECK: idiv | 424 ; CHECK: idiv |
425 ; CHECK: idiv | 425 ; CHECK: idiv |
426 ; CHECK: idiv | 426 ; CHECK: idiv |
427 ; CHECK: idiv | 427 ; CHECK: idiv |
428 ; CHECK: idiv | 428 ; CHECK: idiv |
429 ; CHECK: idiv | 429 ; CHECK: idiv |
430 } | 430 } |
431 | 431 |
432 define <4 x i32> @test_add_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 432 define internal <4 x i32> @test_add_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
433 entry: | 433 entry: |
434 %res = add <4 x i32> %arg0, %arg1 | 434 %res = add <4 x i32> %arg0, %arg1 |
435 ret <4 x i32> %res | 435 ret <4 x i32> %res |
436 ; CHECK-LABEL: test_add_v4i32 | 436 ; CHECK-LABEL: test_add_v4i32 |
437 ; CHECK: paddd | 437 ; CHECK: paddd |
438 } | 438 } |
439 | 439 |
440 define <4 x i32> @test_and_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 440 define internal <4 x i32> @test_and_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
441 entry: | 441 entry: |
442 %res = and <4 x i32> %arg0, %arg1 | 442 %res = and <4 x i32> %arg0, %arg1 |
443 ret <4 x i32> %res | 443 ret <4 x i32> %res |
444 ; CHECK-LABEL: test_and_v4i32 | 444 ; CHECK-LABEL: test_and_v4i32 |
445 ; CHECK: pand | 445 ; CHECK: pand |
446 } | 446 } |
447 | 447 |
448 define <4 x i32> @test_or_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 448 define internal <4 x i32> @test_or_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
449 entry: | 449 entry: |
450 %res = or <4 x i32> %arg0, %arg1 | 450 %res = or <4 x i32> %arg0, %arg1 |
451 ret <4 x i32> %res | 451 ret <4 x i32> %res |
452 ; CHECK-LABEL: test_or_v4i32 | 452 ; CHECK-LABEL: test_or_v4i32 |
453 ; CHECK: por | 453 ; CHECK: por |
454 } | 454 } |
455 | 455 |
456 define <4 x i32> @test_xor_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 456 define internal <4 x i32> @test_xor_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
457 entry: | 457 entry: |
458 %res = xor <4 x i32> %arg0, %arg1 | 458 %res = xor <4 x i32> %arg0, %arg1 |
459 ret <4 x i32> %res | 459 ret <4 x i32> %res |
460 ; CHECK-LABEL: test_xor_v4i32 | 460 ; CHECK-LABEL: test_xor_v4i32 |
461 ; CHECK: pxor | 461 ; CHECK: pxor |
462 } | 462 } |
463 | 463 |
464 define <4 x i32> @test_sub_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 464 define internal <4 x i32> @test_sub_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
465 entry: | 465 entry: |
466 %res = sub <4 x i32> %arg0, %arg1 | 466 %res = sub <4 x i32> %arg0, %arg1 |
467 ret <4 x i32> %res | 467 ret <4 x i32> %res |
468 ; CHECK-LABEL: test_sub_v4i32 | 468 ; CHECK-LABEL: test_sub_v4i32 |
469 ; CHECK: psubd | 469 ; CHECK: psubd |
470 } | 470 } |
471 | 471 |
472 define <4 x i32> @test_mul_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 472 define internal <4 x i32> @test_mul_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
473 entry: | 473 entry: |
474 %res = mul <4 x i32> %arg0, %arg1 | 474 %res = mul <4 x i32> %arg0, %arg1 |
475 ret <4 x i32> %res | 475 ret <4 x i32> %res |
476 ; CHECK-LABEL: test_mul_v4i32 | 476 ; CHECK-LABEL: test_mul_v4i32 |
477 ; CHECK: pmuludq | 477 ; CHECK: pmuludq |
478 ; CHECK: pmuludq | 478 ; CHECK: pmuludq |
479 ; | 479 ; |
480 ; SSE41-LABEL: test_mul_v4i32 | 480 ; SSE41-LABEL: test_mul_v4i32 |
481 ; SSE41: pmulld | 481 ; SSE41: pmulld |
482 } | 482 } |
483 | 483 |
484 define <4 x i32> @test_shl_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 484 define internal <4 x i32> @test_shl_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
485 entry: | 485 entry: |
486 %res = shl <4 x i32> %arg0, %arg1 | 486 %res = shl <4 x i32> %arg0, %arg1 |
487 ret <4 x i32> %res | 487 ret <4 x i32> %res |
488 ; CHECK-LABEL: test_shl_v4i32 | 488 ; CHECK-LABEL: test_shl_v4i32 |
489 ; CHECK: shl | 489 ; CHECK: shl |
490 ; CHECK: shl | 490 ; CHECK: shl |
491 ; CHECK: shl | 491 ; CHECK: shl |
492 ; CHECK: shl | 492 ; CHECK: shl |
493 | 493 |
494 ; This line is to ensure that pmulld is generated in test_mul_v4i32 above. | 494 ; This line is to ensure that pmulld is generated in test_mul_v4i32 above. |
495 ; SSE41-LABEL: test_shl_v4i32 | 495 ; SSE41-LABEL: test_shl_v4i32 |
496 } | 496 } |
497 | 497 |
498 define <4 x i32> @test_lshr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 498 define internal <4 x i32> @test_lshr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
499 entry: | 499 entry: |
500 %res = lshr <4 x i32> %arg0, %arg1 | 500 %res = lshr <4 x i32> %arg0, %arg1 |
501 ret <4 x i32> %res | 501 ret <4 x i32> %res |
502 ; CHECK-LABEL: test_lshr_v4i32 | 502 ; CHECK-LABEL: test_lshr_v4i32 |
503 ; CHECK: shr | 503 ; CHECK: shr |
504 ; CHECK: shr | 504 ; CHECK: shr |
505 ; CHECK: shr | 505 ; CHECK: shr |
506 ; CHECK: shr | 506 ; CHECK: shr |
507 } | 507 } |
508 | 508 |
509 define <4 x i32> @test_ashr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 509 define internal <4 x i32> @test_ashr_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
510 entry: | 510 entry: |
511 %res = ashr <4 x i32> %arg0, %arg1 | 511 %res = ashr <4 x i32> %arg0, %arg1 |
512 ret <4 x i32> %res | 512 ret <4 x i32> %res |
513 ; CHECK-LABEL: test_ashr_v4i32 | 513 ; CHECK-LABEL: test_ashr_v4i32 |
514 ; CHECK: sar | 514 ; CHECK: sar |
515 ; CHECK: sar | 515 ; CHECK: sar |
516 ; CHECK: sar | 516 ; CHECK: sar |
517 ; CHECK: sar | 517 ; CHECK: sar |
518 } | 518 } |
519 | 519 |
520 define <4 x i32> @test_udiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 520 define internal <4 x i32> @test_udiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
521 entry: | 521 entry: |
522 %res = udiv <4 x i32> %arg0, %arg1 | 522 %res = udiv <4 x i32> %arg0, %arg1 |
523 ret <4 x i32> %res | 523 ret <4 x i32> %res |
524 ; CHECK-LABEL: test_udiv_v4i32 | 524 ; CHECK-LABEL: test_udiv_v4i32 |
525 ; CHECK: div | 525 ; CHECK: div |
526 ; CHECK: div | 526 ; CHECK: div |
527 ; CHECK: div | 527 ; CHECK: div |
528 ; CHECK: div | 528 ; CHECK: div |
529 } | 529 } |
530 | 530 |
531 define <4 x i32> @test_sdiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 531 define internal <4 x i32> @test_sdiv_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
532 entry: | 532 entry: |
533 %res = sdiv <4 x i32> %arg0, %arg1 | 533 %res = sdiv <4 x i32> %arg0, %arg1 |
534 ret <4 x i32> %res | 534 ret <4 x i32> %res |
535 ; CHECK-LABEL: test_sdiv_v4i32 | 535 ; CHECK-LABEL: test_sdiv_v4i32 |
536 ; CHECK: idiv | 536 ; CHECK: idiv |
537 ; CHECK: idiv | 537 ; CHECK: idiv |
538 ; CHECK: idiv | 538 ; CHECK: idiv |
539 ; CHECK: idiv | 539 ; CHECK: idiv |
540 } | 540 } |
541 | 541 |
542 define <4 x i32> @test_urem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 542 define internal <4 x i32> @test_urem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
543 entry: | 543 entry: |
544 %res = urem <4 x i32> %arg0, %arg1 | 544 %res = urem <4 x i32> %arg0, %arg1 |
545 ret <4 x i32> %res | 545 ret <4 x i32> %res |
546 ; CHECK-LABEL: test_urem_v4i32 | 546 ; CHECK-LABEL: test_urem_v4i32 |
547 ; CHECK: div | 547 ; CHECK: div |
548 ; CHECK: div | 548 ; CHECK: div |
549 ; CHECK: div | 549 ; CHECK: div |
550 ; CHECK: div | 550 ; CHECK: div |
551 } | 551 } |
552 | 552 |
553 define <4 x i32> @test_srem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { | 553 define internal <4 x i32> @test_srem_v4i32(<4 x i32> %arg0, <4 x i32> %arg1) { |
554 entry: | 554 entry: |
555 %res = srem <4 x i32> %arg0, %arg1 | 555 %res = srem <4 x i32> %arg0, %arg1 |
556 ret <4 x i32> %res | 556 ret <4 x i32> %res |
557 ; CHECK-LABEL: test_srem_v4i32 | 557 ; CHECK-LABEL: test_srem_v4i32 |
558 ; CHECK: idiv | 558 ; CHECK: idiv |
559 ; CHECK: idiv | 559 ; CHECK: idiv |
560 ; CHECK: idiv | 560 ; CHECK: idiv |
561 ; CHECK: idiv | 561 ; CHECK: idiv |
562 } | 562 } |
OLD | NEW |