Skip to content

Commit edb53f6

Browse files
Fix +f16c case
1 parent d7809f2 commit edb53f6

File tree

2 files changed

+23
-38
lines changed

2 files changed

+23
-38
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,9 +1780,12 @@ void VectorLegalizer::ExpandUINT_TO_FLOAT(SDNode *Node,
17801780
// If STRICT_/FMUL is not supported by the target (in case of f16) replace the
17811781
// UINT_TO_FP with a larger float and round to the smaller type
17821782
if ((!IsStrict &&
1783-
TLI.getOperationAction(ISD::FMUL, DstVT) == TargetLowering::Expand) ||
1784-
(IsStrict && TLI.getOperationAction(ISD::STRICT_FMUL, DstVT) ==
1785-
TargetLowering::Expand)) {
1783+
(TLI.getOperationAction(ISD::FMUL, DstVT) == TargetLowering::Expand ||
1784+
TLI.getOperationAction(ISD::FMUL, DstVT) == TargetLowering::Promote)) ||
1785+
(IsStrict && (TLI.getOperationAction(ISD::STRICT_FMUL, DstVT) ==
1786+
TargetLowering::Expand ||
1787+
TLI.getOperationAction(ISD::STRICT_FMUL, DstVT) ==
1788+
TargetLowering::Promote))) {
17861789
EVT FPVT = BW == 32 ? MVT::f32 : MVT::f64;
17871790
SDValue UIToFP;
17881791
SDValue Result;

llvm/test/CodeGen/X86/test_UINT_TO_FP_no_inf_corei7_avx.ll

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,9 @@ define <8 x half> @test_UINT_TO_FP_no_inf8(<8 x i32> %a) {
1010
; AVX-NEXT: vpsrld $16, %xmm2, %xmm2
1111
; AVX-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1212
; AVX-NEXT: vcvtdq2ps %ymm1, %ymm1
13-
; AVX-NEXT: vcvtps2ph $4, %ymm1, %xmm1
14-
; AVX-NEXT: vcvtph2ps %xmm1, %ymm1
1513
; AVX-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
16-
; AVX-NEXT: vcvtps2ph $4, %ymm1, %xmm1
17-
; AVX-NEXT: vcvtph2ps %xmm1, %ymm1
1814
; AVX-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1915
; AVX-NEXT: vcvtdq2ps %ymm0, %ymm0
20-
; AVX-NEXT: vcvtps2ph $4, %ymm0, %xmm0
21-
; AVX-NEXT: vcvtph2ps %xmm0, %ymm0
2216
; AVX-NEXT: vaddps %ymm0, %ymm1, %ymm0
2317
; AVX-NEXT: vcvtps2ph $4, %ymm0, %xmm0
2418
; AVX-NEXT: vzeroupper
@@ -65,39 +59,27 @@ entry:
6559
define <16 x half> @test_UINT_TO_FP_no_inf16(<16 x i32> %a) {
6660
; AVX-LABEL: test_UINT_TO_FP_no_inf16:
6761
; AVX: # %bb.0: # %entry
68-
; AVX-NEXT: vbroadcastss {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535]
69-
; AVX-NEXT: vandps %ymm2, %ymm0, %ymm3
70-
; AVX-NEXT: vcvtdq2ps %ymm3, %ymm3
71-
; AVX-NEXT: vcvtps2ph $4, %ymm3, %xmm3
72-
; AVX-NEXT: vcvtph2ps %xmm3, %ymm3
73-
; AVX-NEXT: vpsrld $16, %xmm0, %xmm4
74-
; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
75-
; AVX-NEXT: vpsrld $16, %xmm0, %xmm0
76-
; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm4, %ymm0
62+
; AVX-NEXT: vpsrld $16, %xmm0, %xmm2
63+
; AVX-NEXT: vextractf128 $1, %ymm0, %xmm3
64+
; AVX-NEXT: vpsrld $16, %xmm3, %xmm3
65+
; AVX-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
66+
; AVX-NEXT: vcvtdq2ps %ymm2, %ymm2
67+
; AVX-NEXT: vbroadcastss {{.*#+}} ymm3 = [6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4]
68+
; AVX-NEXT: vmulps %ymm3, %ymm2, %ymm2
69+
; AVX-NEXT: vbroadcastss {{.*#+}} ymm4 = [65535,65535,65535,65535,65535,65535,65535,65535]
70+
; AVX-NEXT: vandps %ymm4, %ymm0, %ymm0
7771
; AVX-NEXT: vcvtdq2ps %ymm0, %ymm0
72+
; AVX-NEXT: vaddps %ymm0, %ymm2, %ymm0
7873
; AVX-NEXT: vcvtps2ph $4, %ymm0, %xmm0
79-
; AVX-NEXT: vcvtph2ps %xmm0, %ymm0
80-
; AVX-NEXT: vbroadcastss {{.*#+}} ymm4 = [+Inf,+Inf,+Inf,+Inf,+Inf,+Inf,+Inf,+Inf]
81-
; AVX-NEXT: vmulps %ymm4, %ymm0, %ymm0
82-
; AVX-NEXT: vcvtps2ph $4, %ymm0, %xmm0
83-
; AVX-NEXT: vcvtph2ps %xmm0, %ymm0
84-
; AVX-NEXT: vaddps %ymm3, %ymm0, %ymm0
85-
; AVX-NEXT: vcvtps2ph $4, %ymm0, %xmm0
86-
; AVX-NEXT: vandps %ymm2, %ymm1, %ymm2
74+
; AVX-NEXT: vpsrld $16, %xmm1, %xmm2
75+
; AVX-NEXT: vextractf128 $1, %ymm1, %xmm5
76+
; AVX-NEXT: vpsrld $16, %xmm5, %xmm5
77+
; AVX-NEXT: vinsertf128 $1, %xmm5, %ymm2, %ymm2
8778
; AVX-NEXT: vcvtdq2ps %ymm2, %ymm2
88-
; AVX-NEXT: vcvtps2ph $4, %ymm2, %xmm2
89-
; AVX-NEXT: vcvtph2ps %xmm2, %ymm2
90-
; AVX-NEXT: vpsrld $16, %xmm1, %xmm3
91-
; AVX-NEXT: vextractf128 $1, %ymm1, %xmm1
92-
; AVX-NEXT: vpsrld $16, %xmm1, %xmm1
93-
; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
79+
; AVX-NEXT: vmulps %ymm3, %ymm2, %ymm2
80+
; AVX-NEXT: vandps %ymm4, %ymm1, %ymm1
9481
; AVX-NEXT: vcvtdq2ps %ymm1, %ymm1
95-
; AVX-NEXT: vcvtps2ph $4, %ymm1, %xmm1
96-
; AVX-NEXT: vcvtph2ps %xmm1, %ymm1
97-
; AVX-NEXT: vmulps %ymm4, %ymm1, %ymm1
98-
; AVX-NEXT: vcvtps2ph $4, %ymm1, %xmm1
99-
; AVX-NEXT: vcvtph2ps %xmm1, %ymm1
100-
; AVX-NEXT: vaddps %ymm2, %ymm1, %ymm1
82+
; AVX-NEXT: vaddps %ymm1, %ymm2, %ymm1
10183
; AVX-NEXT: vcvtps2ph $4, %ymm1, %xmm1
10284
; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
10385
; AVX-NEXT: retq

0 commit comments

Comments
 (0)