Skip to content

Commit 0ea9cdb

Browse files
committed
[X86] Fold extract_subvector(fp_to_uint(x)) case to match existing fp_to_sint fold (necessary to fix #83402 on AVX512 targets).
Prep work for #83402
1 parent f86da4c commit 0ea9cdb

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57167,8 +57167,10 @@ static SDValue combineEXTRACT_SUBVECTOR(SDNode *N, SelectionDAG &DAG,
5716757167
return DAG.getNode(X86ISD::VFPEXT, DL, VT, InVec.getOperand(0));
5716857168
}
5716957169
}
57170-
// v4i32 CVTPS2DQ(v4f32).
57171-
if (InOpcode == ISD::FP_TO_SINT && VT == MVT::v4i32) {
57170+
// v4i32 CVTPS2DQ(v4f32) / CVTPS2UDQ(v4f32).
57171+
if ((InOpcode == ISD::FP_TO_SINT ||
57172+
(InOpcode == ISD::FP_TO_UINT && Subtarget.hasVLX())) &&
57173+
VT == MVT::v4i32) {
5717257174
SDValue Src = InVec.getOperand(0);
5717357175
if (Src.getValueType().getScalarType() == MVT::f32)
5717457176
return DAG.getNode(InOpcode, DL, VT,

llvm/test/CodeGen/X86/vector-half-conversions.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5233,8 +5233,7 @@ define <4 x i32> @fptoui_4f16_to_4i32(<4 x half> %a) nounwind {
52335233
; AVX512-FASTLANE-LABEL: fptoui_4f16_to_4i32:
52345234
; AVX512-FASTLANE: # %bb.0:
52355235
; AVX512-FASTLANE-NEXT: vcvtph2ps %xmm0, %ymm0
5236-
; AVX512-FASTLANE-NEXT: vcvttps2udq %ymm0, %ymm0
5237-
; AVX512-FASTLANE-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
5236+
; AVX512-FASTLANE-NEXT: vcvttps2udq %xmm0, %xmm0
52385237
; AVX512-FASTLANE-NEXT: vzeroupper
52395238
; AVX512-FASTLANE-NEXT: retq
52405239
%cvt = fptoui <4 x half> %a to <4 x i32>

0 commit comments

Comments
 (0)