1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s
4 define <4 x i32> @trunc_64_32(<4 x i64> %A) nounwind uwtable readnone ssp{
5 ; CHECK-LABEL: trunc_64_32:
7 ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
8 ; CHECK-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
9 ; CHECK-NEXT: vzeroupper
11 %B = trunc <4 x i64> %A to <4 x i32>
15 define <8 x i16> @trunc_32_16(<8 x i32> %A) nounwind uwtable readnone ssp{
16 ; CHECK-LABEL: trunc_32_16:
18 ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
19 ; CHECK-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
20 ; CHECK-NEXT: vpshufb %xmm2, %xmm1, %xmm1
21 ; CHECK-NEXT: vpshufb %xmm2, %xmm0, %xmm0
22 ; CHECK-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
23 ; CHECK-NEXT: vzeroupper
25 %B = trunc <8 x i32> %A to <8 x i16>
29 define <16 x i8> @trunc_16_8(<16 x i16> %A) nounwind uwtable readnone ssp{
30 ; CHECK-LABEL: trunc_16_8:
32 ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
33 ; CHECK-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
34 ; CHECK-NEXT: vpshufb %xmm2, %xmm1, %xmm1
35 ; CHECK-NEXT: vpshufb %xmm2, %xmm0, %xmm0
36 ; CHECK-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
37 ; CHECK-NEXT: vzeroupper
39 %B = trunc <16 x i16> %A to <16 x i8>
43 define <16 x i8> @usat_trunc_wb_256(<16 x i16> %i) {
44 ; CHECK-LABEL: usat_trunc_wb_256:
46 ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
47 ; CHECK-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
48 ; CHECK-NEXT: vzeroupper
50 %x3 = icmp ult <16 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
51 %x5 = select <16 x i1> %x3, <16 x i16> %i, <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
52 %x6 = trunc <16 x i16> %x5 to <16 x i8>
56 define <8 x i16> @usat_trunc_dw_256(<8 x i32> %i) {
57 ; CHECK-LABEL: usat_trunc_dw_256:
59 ; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
60 ; CHECK-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
61 ; CHECK-NEXT: vzeroupper
63 %x3 = icmp ult <8 x i32> %i, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
64 %x5 = select <8 x i1> %x3, <8 x i32> %i, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
65 %x6 = trunc <8 x i32> %x5 to <8 x i16>