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