Skip to content

Commit c30244b

Browse files
committed
Minor refactoring.
Switch getInsertVectorElts -> SCALAR_TO_VECTOR, and fixed styling issue.
1 parent 1806c40 commit c30244b

File tree

1 file changed

+30
-38
lines changed

1 file changed

+30
-38
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19167,24 +19167,31 @@ static SDValue LowerFLDEXP(SDValue Op, const X86Subtarget &Subtarget,
1916719167
default:
1916819168
return SDValue();
1916919169
case MVT::f16:
19170-
if (!Subtarget.hasFP16()) {
19171-
X = DAG.getNode(ISD::FP_EXTEND, DL, MVT::f32, X);
19172-
}
19173-
break;
19170+
if (!Subtarget.hasFP16())
19171+
X = DAG.getFPExtendOrRound(X, DL, MVT::f32);
19172+
[[fallthrough]];
1917419173
case MVT::f32:
19175-
case MVT::f64:
19176-
break;
19174+
case MVT::f64: {
19175+
MVT VT = MVT::getVectorVT(X.getSimpleValueType(),
19176+
128 / X.getSimpleValueType().getSizeInBits());
19177+
Exp = DAG.getNode(ISD::SINT_TO_FP, DL, X.getValueType(), Exp);
19178+
SDValue VX = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VT, X);
19179+
SDValue VExp = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VT, Exp);
19180+
SDValue Scalefs = DAG.getNode(X86ISD::SCALEFS, DL, VT, VX, VExp, VX);
19181+
SDValue Final = DAG.getExtractVectorElt(DL, X.getValueType(), Scalefs, 0);
19182+
if (X.getValueType() != XTy)
19183+
Final = DAG.getFPExtendOrRound(Final, DL, XTy);
19184+
return Final;
19185+
}
1917719186
case MVT::v4f32:
1917819187
case MVT::v2f64:
1917919188
case MVT::v8f32:
1918019189
case MVT::v4f64:
1918119190
case MVT::v16f32:
1918219191
case MVT::v8f64:
19183-
if (XTy.getSizeInBits() == 512 || Subtarget.hasVLX()) {
19184-
Exp = DAG.getNode(ISD::SINT_TO_FP, DL, XTy, Exp);
19192+
Exp = DAG.getNode(ISD::SINT_TO_FP, DL, XTy, Exp);
19193+
if (XTy.getSizeInBits() == 512 || Subtarget.hasVLX())
1918519194
return DAG.getNode(X86ISD::SCALEF, DL, XTy, X, Exp, X);
19186-
}
19187-
Exp = DAG.getNode(ISD::SINT_TO_FP, DL, X.getValueType(), Exp);
1918819195
break;
1918919196
case MVT::v8f16:
1919019197
case MVT::v16f16:
@@ -19196,8 +19203,8 @@ static SDValue LowerFLDEXP(SDValue Op, const X86Subtarget &Subtarget,
1919619203
break;
1919719204
}
1919819205
ExtVT = XTy.changeVectorElementType(MVT::f32);
19199-
X = DAG.getNode(ISD::FP_EXTEND, DL, ExtVT, X);
19200-
Exp = DAG.getNode(ISD::SIGN_EXTEND, DL, ExtVT.changeTypeToInteger(), Exp);
19206+
X = DAG.getFPExtendOrRound(X, DL, ExtVT);
19207+
Exp = DAG.getSExtOrTrunc(Exp, DL, ExtVT.changeTypeToInteger());
1920119208
break;
1920219209
case MVT::v32f16:
1920319210
if (Subtarget.hasFP16()) {
@@ -19207,35 +19214,20 @@ static SDValue LowerFLDEXP(SDValue Op, const X86Subtarget &Subtarget,
1920719214
return splitVectorOp(Op, DAG, DL);
1920819215
}
1920919216

19210-
if (XTy.isVector()) {
19211-
SDValue WideX = widenSubVector(X, true, Subtarget, DAG, DL, 512);
19212-
SDValue WideExp = widenSubVector(Exp, true, Subtarget, DAG, DL, 512);
19213-
if (XTy.getScalarType() == MVT::f16 && !Subtarget.hasFP16()) {
19214-
WideExp =
19215-
DAG.getNode(ISD::SINT_TO_FP, DL, WideX.getSimpleValueType(), WideExp);
19216-
SDValue Scalef = DAG.getNode(X86ISD::SCALEF, DL, WideX.getValueType(),
19217-
WideX, WideExp, WideX);
19218-
SDValue Final =
19219-
DAG.getExtractSubvector(DL, X.getSimpleValueType(), Scalef, 0);
19220-
return DAG.getNode(ISD::FP_ROUND, DL, XTy, Final,
19221-
DAG.getTargetConstant(0, DL, MVT::i32));
19222-
}
19217+
SDValue WideX = widenSubVector(X, true, Subtarget, DAG, DL, 512);
19218+
SDValue WideExp = widenSubVector(Exp, true, Subtarget, DAG, DL, 512);
19219+
if (X.getValueType() != XTy) {
19220+
WideExp =
19221+
DAG.getNode(ISD::SINT_TO_FP, DL, WideX.getSimpleValueType(), WideExp);
1922319222
SDValue Scalef = DAG.getNode(X86ISD::SCALEF, DL, WideX.getValueType(),
1922419223
WideX, WideExp, WideX);
19225-
return DAG.getExtractSubvector(DL, XTy, Scalef, 0);
19226-
} else {
19227-
MVT VT = MVT::getVectorVT(X.getSimpleValueType(),
19228-
128 / X.getSimpleValueType().getSizeInBits());
19229-
Exp = DAG.getNode(ISD::SINT_TO_FP, DL, X.getValueType(), Exp);
19230-
SDValue VX = DAG.getInsertVectorElt(DL, DAG.getUNDEF(VT), X, 0);
19231-
SDValue VExp = DAG.getInsertVectorElt(DL, DAG.getUNDEF(VT), Exp, 0);
19232-
SDValue Scalefs = DAG.getNode(X86ISD::SCALEFS, DL, VT, VX, VExp, VX);
19233-
SDValue Final = DAG.getExtractVectorElt(DL, X.getValueType(), Scalefs, 0);
19234-
if (X.getValueType() != XTy)
19235-
Final = DAG.getNode(ISD::FP_ROUND, DL, XTy, Final,
19236-
DAG.getTargetConstant(0, DL, MVT::i32));
19237-
return Final;
19224+
SDValue Final =
19225+
DAG.getExtractSubvector(DL, X.getSimpleValueType(), Scalef, 0);
19226+
return DAG.getFPExtendOrRound(Final, DL, XTy);
1923819227
}
19228+
SDValue Scalef = DAG.getNode(X86ISD::SCALEF, DL, WideX.getValueType(), WideX,
19229+
WideExp, WideX);
19230+
return DAG.getExtractSubvector(DL, XTy, Scalef, 0);
1923919231
}
1924019232

1924119233
static SDValue LowerSCALAR_TO_VECTOR(SDValue Op, const X86Subtarget &Subtarget,

0 commit comments

Comments
 (0)