@@ -269,3 +269,120 @@ define <1 x i64> @atomic_vec1_i64_align(ptr %x) nounwind {
269
269
%ret = load atomic <1 x i64 >, ptr %x acquire , align 8
270
270
ret <1 x i64 > %ret
271
271
}
272
+
273
+ define <1 x half > @atomic_vec1_half (ptr %x ) {
274
+ ; CHECK-O3-LABEL: atomic_vec1_half:
275
+ ; CHECK-O3: # %bb.0:
276
+ ; CHECK-O3-NEXT: movzwl (%rdi), %eax
277
+ ; CHECK-O3-NEXT: pinsrw $0, %eax, %xmm0
278
+ ; CHECK-O3-NEXT: retq
279
+ ;
280
+ ; CHECK-SSE-O3-LABEL: atomic_vec1_half:
281
+ ; CHECK-SSE-O3: # %bb.0:
282
+ ; CHECK-SSE-O3-NEXT: movzwl (%rdi), %eax
283
+ ; CHECK-SSE-O3-NEXT: pinsrw $0, %eax, %xmm0
284
+ ; CHECK-SSE-O3-NEXT: retq
285
+ ;
286
+ ; CHECK-AVX-O3-LABEL: atomic_vec1_half:
287
+ ; CHECK-AVX-O3: # %bb.0:
288
+ ; CHECK-AVX-O3-NEXT: movzwl (%rdi), %eax
289
+ ; CHECK-AVX-O3-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
290
+ ; CHECK-AVX-O3-NEXT: retq
291
+ ;
292
+ ; CHECK-O0-LABEL: atomic_vec1_half:
293
+ ; CHECK-O0: # %bb.0:
294
+ ; CHECK-O0-NEXT: movw (%rdi), %cx
295
+ ; CHECK-O0-NEXT: # implicit-def: $eax
296
+ ; CHECK-O0-NEXT: movw %cx, %ax
297
+ ; CHECK-O0-NEXT: # implicit-def: $xmm0
298
+ ; CHECK-O0-NEXT: pinsrw $0, %eax, %xmm0
299
+ ; CHECK-O0-NEXT: retq
300
+ ;
301
+ ; CHECK-SSE-O0-LABEL: atomic_vec1_half:
302
+ ; CHECK-SSE-O0: # %bb.0:
303
+ ; CHECK-SSE-O0-NEXT: movw (%rdi), %cx
304
+ ; CHECK-SSE-O0-NEXT: # implicit-def: $eax
305
+ ; CHECK-SSE-O0-NEXT: movw %cx, %ax
306
+ ; CHECK-SSE-O0-NEXT: # implicit-def: $xmm0
307
+ ; CHECK-SSE-O0-NEXT: pinsrw $0, %eax, %xmm0
308
+ ; CHECK-SSE-O0-NEXT: retq
309
+ ;
310
+ ; CHECK-AVX-O0-LABEL: atomic_vec1_half:
311
+ ; CHECK-AVX-O0: # %bb.0:
312
+ ; CHECK-AVX-O0-NEXT: movw (%rdi), %cx
313
+ ; CHECK-AVX-O0-NEXT: # implicit-def: $eax
314
+ ; CHECK-AVX-O0-NEXT: movw %cx, %ax
315
+ ; CHECK-AVX-O0-NEXT: # implicit-def: $xmm0
316
+ ; CHECK-AVX-O0-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
317
+ ; CHECK-AVX-O0-NEXT: retq
318
+ %ret = load atomic <1 x half >, ptr %x acquire , align 2
319
+ ret <1 x half > %ret
320
+ }
321
+
322
+ define <1 x float > @atomic_vec1_float (ptr %x ) {
323
+ ; CHECK-O3-LABEL: atomic_vec1_float:
324
+ ; CHECK-O3: # %bb.0:
325
+ ; CHECK-O3-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
326
+ ; CHECK-O3-NEXT: retq
327
+ ;
328
+ ; CHECK-SSE-O3-LABEL: atomic_vec1_float:
329
+ ; CHECK-SSE-O3: # %bb.0:
330
+ ; CHECK-SSE-O3-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
331
+ ; CHECK-SSE-O3-NEXT: retq
332
+ ;
333
+ ; CHECK-AVX-O3-LABEL: atomic_vec1_float:
334
+ ; CHECK-AVX-O3: # %bb.0:
335
+ ; CHECK-AVX-O3-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
336
+ ; CHECK-AVX-O3-NEXT: retq
337
+ ;
338
+ ; CHECK-O0-LABEL: atomic_vec1_float:
339
+ ; CHECK-O0: # %bb.0:
340
+ ; CHECK-O0-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
341
+ ; CHECK-O0-NEXT: retq
342
+ ;
343
+ ; CHECK-SSE-O0-LABEL: atomic_vec1_float:
344
+ ; CHECK-SSE-O0: # %bb.0:
345
+ ; CHECK-SSE-O0-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
346
+ ; CHECK-SSE-O0-NEXT: retq
347
+ ;
348
+ ; CHECK-AVX-O0-LABEL: atomic_vec1_float:
349
+ ; CHECK-AVX-O0: # %bb.0:
350
+ ; CHECK-AVX-O0-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
351
+ ; CHECK-AVX-O0-NEXT: retq
352
+ %ret = load atomic <1 x float >, ptr %x acquire , align 4
353
+ ret <1 x float > %ret
354
+ }
355
+
356
+ define <1 x double > @atomic_vec1_double_align (ptr %x ) nounwind {
357
+ ; CHECK-O3-LABEL: atomic_vec1_double_align:
358
+ ; CHECK-O3: # %bb.0:
359
+ ; CHECK-O3-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
360
+ ; CHECK-O3-NEXT: retq
361
+ ;
362
+ ; CHECK-SSE-O3-LABEL: atomic_vec1_double_align:
363
+ ; CHECK-SSE-O3: # %bb.0:
364
+ ; CHECK-SSE-O3-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
365
+ ; CHECK-SSE-O3-NEXT: retq
366
+ ;
367
+ ; CHECK-AVX-O3-LABEL: atomic_vec1_double_align:
368
+ ; CHECK-AVX-O3: # %bb.0:
369
+ ; CHECK-AVX-O3-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
370
+ ; CHECK-AVX-O3-NEXT: retq
371
+ ;
372
+ ; CHECK-O0-LABEL: atomic_vec1_double_align:
373
+ ; CHECK-O0: # %bb.0:
374
+ ; CHECK-O0-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
375
+ ; CHECK-O0-NEXT: retq
376
+ ;
377
+ ; CHECK-SSE-O0-LABEL: atomic_vec1_double_align:
378
+ ; CHECK-SSE-O0: # %bb.0:
379
+ ; CHECK-SSE-O0-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
380
+ ; CHECK-SSE-O0-NEXT: retq
381
+ ;
382
+ ; CHECK-AVX-O0-LABEL: atomic_vec1_double_align:
383
+ ; CHECK-AVX-O0: # %bb.0:
384
+ ; CHECK-AVX-O0-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
385
+ ; CHECK-AVX-O0-NEXT: retq
386
+ %ret = load atomic <1 x double >, ptr %x acquire , align 8
387
+ ret <1 x double > %ret
388
+ }
0 commit comments