@@ -6295,31 +6295,21 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
6295
6295
SDValue Op0 = Op.getOperand(0);
6296
6296
EVT Op0VT = Op0.getValueType();
6297
6297
MVT XLenVT = Subtarget.getXLenVT();
6298
- if (VT == MVT::f16 && Op0VT == MVT::i16 &&
6299
- Subtarget.hasStdExtZfhminOrZhinxmin()) {
6298
+ if (Op0VT == MVT::i16 &&
6299
+ ((VT == MVT::f16 && Subtarget.hasStdExtZfhminOrZhinxmin()) ||
6300
+ (VT == MVT::bf16 && Subtarget.hasStdExtZfbfmin()))) {
6300
6301
SDValue NewOp0 = DAG.getNode(ISD::ANY_EXTEND, DL, XLenVT, Op0);
6301
- SDValue FPConv = DAG.getNode(RISCVISD::FMV_H_X, DL, MVT::f16, NewOp0);
6302
- return FPConv;
6303
- }
6304
- if (VT == MVT::bf16 && Op0VT == MVT::i16 &&
6305
- Subtarget.hasStdExtZfbfmin()) {
6306
- SDValue NewOp0 = DAG.getNode(ISD::ANY_EXTEND, DL, XLenVT, Op0);
6307
- SDValue FPConv = DAG.getNode(RISCVISD::FMV_H_X, DL, MVT::bf16, NewOp0);
6308
- return FPConv;
6302
+ return DAG.getNode(RISCVISD::FMV_H_X, DL, VT, NewOp0);
6309
6303
}
6310
6304
if (VT == MVT::f32 && Op0VT == MVT::i32 && Subtarget.is64Bit() &&
6311
6305
Subtarget.hasStdExtFOrZfinx()) {
6312
6306
SDValue NewOp0 = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op0);
6313
- SDValue FPConv =
6314
- DAG.getNode(RISCVISD::FMV_W_X_RV64, DL, MVT::f32, NewOp0);
6315
- return FPConv;
6307
+ return DAG.getNode(RISCVISD::FMV_W_X_RV64, DL, MVT::f32, NewOp0);
6316
6308
}
6317
6309
if (VT == MVT::f64 && Op0VT == MVT::i64 && XLenVT == MVT::i32) {
6318
6310
SDValue Lo, Hi;
6319
6311
std::tie(Lo, Hi) = DAG.SplitScalar(Op0, DL, MVT::i32, MVT::i32);
6320
- SDValue RetReg =
6321
- DAG.getNode(RISCVISD::BuildPairF64, DL, MVT::f64, Lo, Hi);
6322
- return RetReg;
6312
+ return DAG.getNode(RISCVISD::BuildPairF64, DL, MVT::f64, Lo, Hi);
6323
6313
}
6324
6314
6325
6315
// Consider other scalar<->scalar casts as legal if the types are legal.
@@ -12567,12 +12557,9 @@ void RISCVTargetLowering::ReplaceNodeResults(SDNode *N,
12567
12557
SDValue Op0 = N->getOperand(0);
12568
12558
EVT Op0VT = Op0.getValueType();
12569
12559
MVT XLenVT = Subtarget.getXLenVT();
12570
- if (VT == MVT::i16 && Op0VT == MVT::f16 &&
12571
- Subtarget.hasStdExtZfhminOrZhinxmin()) {
12572
- SDValue FPConv = DAG.getNode(RISCVISD::FMV_X_ANYEXTH, DL, XLenVT, Op0);
12573
- Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, MVT::i16, FPConv));
12574
- } else if (VT == MVT::i16 && Op0VT == MVT::bf16 &&
12575
- Subtarget.hasStdExtZfbfmin()) {
12560
+ if (VT == MVT::i16 &&
12561
+ ((Op0VT == MVT::f16 && Subtarget.hasStdExtZfhminOrZhinxmin()) ||
12562
+ (Op0VT == MVT::bf16 && Subtarget.hasStdExtZfbfmin()))) {
12576
12563
SDValue FPConv = DAG.getNode(RISCVISD::FMV_X_ANYEXTH, DL, XLenVT, Op0);
12577
12564
Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, MVT::i16, FPConv));
12578
12565
} else if (VT == MVT::i32 && Op0VT == MVT::f32 && Subtarget.is64Bit() &&
0 commit comments