Skip to content

Commit 60808a4

Browse files
authored
[X86][FP16] Add tests for inttofp without VLX, NFC (#142954)
1 parent d88067c commit 60808a4

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64 -mattr=+avx512fp16 | FileCheck %s
3+
4+
define <2 x half> @vector_sint64ToHalf(<2 x i64> %int64) {
5+
; CHECK-LABEL: vector_sint64ToHalf:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
8+
; CHECK-NEXT: vcvtqq2ph %zmm0, %xmm0
9+
; CHECK-NEXT: vzeroupper
10+
; CHECK-NEXT: retq
11+
%fp16 = sitofp <2 x i64> %int64 to <2 x half>
12+
ret <2 x half> %fp16
13+
}
14+
15+
define <4 x half> @vector_sint32ToHalf(<4 x i32> %int32) {
16+
; CHECK-LABEL: vector_sint32ToHalf:
17+
; CHECK: # %bb.0:
18+
; CHECK-NEXT: vextractps $3, %xmm0, %eax
19+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm1, %xmm1
20+
; CHECK-NEXT: vextractps $2, %xmm0, %eax
21+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm2, %xmm2
22+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
23+
; CHECK-NEXT: vextractps $1, %xmm0, %eax
24+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm2
25+
; CHECK-NEXT: vmovd %xmm0, %eax
26+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm0
27+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
28+
; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero
29+
; CHECK-NEXT: retq
30+
%fp16 = sitofp <4 x i32> %int32 to <4 x half>
31+
ret <4 x half> %fp16
32+
}
33+
34+
define <8 x half> @vector_sint16ToHalf(<8 x i16> %int16) {
35+
; CHECK-LABEL: vector_sint16ToHalf:
36+
; CHECK: # %bb.0:
37+
; CHECK-NEXT: vpextrw $7, %xmm0, %eax
38+
; CHECK-NEXT: cwtl
39+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm1, %xmm1
40+
; CHECK-NEXT: vpextrw $6, %xmm0, %eax
41+
; CHECK-NEXT: cwtl
42+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm2, %xmm2
43+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
44+
; CHECK-NEXT: vpextrw $5, %xmm0, %eax
45+
; CHECK-NEXT: cwtl
46+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm2
47+
; CHECK-NEXT: vpextrw $4, %xmm0, %eax
48+
; CHECK-NEXT: cwtl
49+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm3
50+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
51+
; CHECK-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
52+
; CHECK-NEXT: vpextrw $3, %xmm0, %eax
53+
; CHECK-NEXT: cwtl
54+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm2
55+
; CHECK-NEXT: vpextrw $2, %xmm0, %eax
56+
; CHECK-NEXT: cwtl
57+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm3
58+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
59+
; CHECK-NEXT: vpextrw $1, %xmm0, %eax
60+
; CHECK-NEXT: cwtl
61+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm3
62+
; CHECK-NEXT: vmovw %xmm0, %eax
63+
; CHECK-NEXT: cwtl
64+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm0
65+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
66+
; CHECK-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
67+
; CHECK-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
68+
; CHECK-NEXT: retq
69+
%fp16 = sitofp <8 x i16> %int16 to <8 x half>
70+
ret <8 x half> %fp16
71+
}
72+
73+
define <2 x half> @vector_uint64ToHalf(<2 x i64> %int64) {
74+
; CHECK-LABEL: vector_uint64ToHalf:
75+
; CHECK: # %bb.0:
76+
; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
77+
; CHECK-NEXT: vcvtuqq2ph %zmm0, %xmm0
78+
; CHECK-NEXT: vzeroupper
79+
; CHECK-NEXT: retq
80+
%fp16 = uitofp <2 x i64> %int64 to <2 x half>
81+
ret <2 x half> %fp16
82+
}
83+
84+
; define <4 x half> @vector_uint32ToHalf(<4 x i32> %int32) {
85+
; %fp16 = uitofp <4 x i32> %int32 to <4 x half>
86+
; ret <4 x half> %fp16
87+
; }
88+
89+
define <8 x half> @vector_uint16ToHalf(<8 x i16> %int16) {
90+
; CHECK-LABEL: vector_uint16ToHalf:
91+
; CHECK: # %bb.0:
92+
; CHECK-NEXT: vpextrw $7, %xmm0, %eax
93+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm1, %xmm1
94+
; CHECK-NEXT: vpextrw $6, %xmm0, %eax
95+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm2, %xmm2
96+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
97+
; CHECK-NEXT: vpextrw $5, %xmm0, %eax
98+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm2
99+
; CHECK-NEXT: vpextrw $4, %xmm0, %eax
100+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm3, %xmm3
101+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
102+
; CHECK-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
103+
; CHECK-NEXT: vpextrw $3, %xmm0, %eax
104+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm2
105+
; CHECK-NEXT: vpextrw $2, %xmm0, %eax
106+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm3
107+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
108+
; CHECK-NEXT: vpextrw $1, %xmm0, %eax
109+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm3
110+
; CHECK-NEXT: vpextrw $0, %xmm0, %eax
111+
; CHECK-NEXT: vcvtsi2sh %eax, %xmm4, %xmm0
112+
; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
113+
; CHECK-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
114+
; CHECK-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
115+
; CHECK-NEXT: retq
116+
%fp16 = uitofp <8 x i16> %int16 to <8 x half>
117+
ret <8 x half> %fp16
118+
}

0 commit comments

Comments
 (0)