Skip to content

Commit 01d9c7f

Browse files
authored
[X86] combineSCALAR_TO_VECTOR - fold (v4i32 (scalar_to_vector (i32 (bitcast (float))))) to MOVD/SS (#140704)
Partial fix for #140693
1 parent 54f2b45 commit 01d9c7f

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59800,14 +59800,18 @@ static SDValue combineSCALAR_TO_VECTOR(SDNode *N, SelectionDAG &DAG,
5980059800
DAG.getZExtOrTrunc(ZeroExt, DL, MVT::i32))));
5980159801
}
5980259802

59803-
if (VT == MVT::v2i64 && Src.getOpcode() == ISD::BITCAST) {
59803+
if (Src.getOpcode() == ISD::BITCAST) {
5980459804
SDValue SrcOp = Src.getOperand(0);
59805+
// Combine (v4i32 (scalar_to_vector (i32 (bitcast (float))))) to MOVD.
59806+
if (VT == MVT::v4i32 && SrcOp.getValueType() == MVT::f32)
59807+
return DAG.getBitcast(
59808+
VT, DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, MVT::v4f32, SrcOp));
5980559809
// Combine (v2i64 (scalar_to_vector (i64 (bitcast (double))))) to MOVQ.
59806-
if (SrcOp.getValueType() == MVT::f64)
59810+
if (VT == MVT::v2i64 && SrcOp.getValueType() == MVT::f64)
5980759811
return DAG.getBitcast(
5980859812
VT, DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, MVT::v2f64, SrcOp));
5980959813
// Combine (v2i64 (scalar_to_vector (i64 (bitcast (mmx))))) to MOVQ2DQ.
59810-
if (SrcOp.getValueType() == MVT::x86mmx)
59814+
if (VT == MVT::v2i64 && SrcOp.getValueType() == MVT::x86mmx)
5981159815
return DAG.getNode(X86ISD::MOVQ2DQ, DL, VT, SrcOp);
5981259816
}
5981359817

llvm/test/CodeGen/X86/scalarize-fp.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -911,8 +911,6 @@ define <4 x float> @merge_fcmp_cmpeqss_v4f32(<4 x float> %x, <4 x float> %y) {
911911
; AVX1-LABEL: merge_fcmp_cmpeqss_v4f32:
912912
; AVX1: # %bb.0:
913913
; AVX1-NEXT: vcmpeqss %xmm0, %xmm1, %xmm1
914-
; AVX1-NEXT: vmovd %xmm1, %eax
915-
; AVX1-NEXT: vmovd %eax, %xmm1
916914
; AVX1-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
917915
; AVX1-NEXT: retq
918916
;

0 commit comments

Comments
 (0)