xref: /llvm-project/llvm/test/CodeGen/X86/avx-trunc.ll (revision 156f83adc2af453009a3d5fb56c140d8255892f1)
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
3
4define <4 x i32> @trunc_64_32(<4 x i64> %A) nounwind uwtable readnone ssp{
5; CHECK-LABEL: trunc_64_32:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
8; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
9; CHECK-NEXT:    vzeroupper
10; CHECK-NEXT:    retq
11  %B = trunc <4 x i64> %A to <4 x i32>
12  ret <4 x i32>%B
13}
14
15define <8 x i16> @trunc_32_16(<8 x i32> %A) nounwind uwtable readnone ssp{
16; CHECK-LABEL: trunc_32_16:
17; CHECK:       # %bb.0:
18; CHECK-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
19; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
20; CHECK-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
21; CHECK-NEXT:    vzeroupper
22; CHECK-NEXT:    retq
23  %B = trunc <8 x i32> %A to <8 x i16>
24  ret <8 x i16>%B
25}
26
27define <16 x i8> @trunc_16_8(<16 x i16> %A) nounwind uwtable readnone ssp{
28; CHECK-LABEL: trunc_16_8:
29; CHECK:       # %bb.0:
30; CHECK-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
31; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
32; CHECK-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
33; CHECK-NEXT:    vzeroupper
34; CHECK-NEXT:    retq
35  %B = trunc <16 x i16> %A to <16 x i8>
36  ret <16 x i8> %B
37}
38
39
40