xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx-cvt-2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Check that we generate vector conversion from float to narrower int types
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker%f32vec_t = type <8 x float>
7*9880d681SAndroid Build Coastguard Worker%i16vec_t = type <8 x i16>
8*9880d681SAndroid Build Coastguard Worker%i8vec_t =  type <8 x i8>
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine void @fptoui16(%f32vec_t %a, %i16vec_t *%p) {
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptoui16:
12*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa %xmm0, (%rdi)
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vzeroupper
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
22*9880d681SAndroid Build Coastguard Worker  %b = fptoui %f32vec_t %a to %i16vec_t
23*9880d681SAndroid Build Coastguard Worker  store %i16vec_t %b, %i16vec_t * %p
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine void @fptosi16(%f32vec_t %a, %i16vec_t *%p) {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi16:
29*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa %xmm0, (%rdi)
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vzeroupper
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
39*9880d681SAndroid Build Coastguard Worker  %b = fptosi %f32vec_t %a to %i16vec_t
40*9880d681SAndroid Build Coastguard Worker  store %i16vec_t %b, %i16vec_t * %p
41*9880d681SAndroid Build Coastguard Worker  ret void
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine void @fptoui8(%f32vec_t %a, %i8vec_t *%p) {
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptoui8:
46*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovq %xmm0, (%rdi)
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vzeroupper
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
57*9880d681SAndroid Build Coastguard Worker  %b = fptoui %f32vec_t %a to %i8vec_t
58*9880d681SAndroid Build Coastguard Worker  store %i8vec_t %b, %i8vec_t * %p
59*9880d681SAndroid Build Coastguard Worker  ret void
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine void @fptosi8(%f32vec_t %a, %i8vec_t *%p) {
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fptosi8:
64*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovq %xmm0, (%rdi)
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vzeroupper
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
75*9880d681SAndroid Build Coastguard Worker  %b = fptosi %f32vec_t %a to %i8vec_t
76*9880d681SAndroid Build Coastguard Worker  store %i8vec_t %b, %i8vec_t * %p
77*9880d681SAndroid Build Coastguard Worker  ret void
78*9880d681SAndroid Build Coastguard Worker}
79