@@ -1251,39 +1251,35 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
12511251 case Intrinsic::lround:
12521252 case Intrinsic::llround: {
12531253 auto LT = getTypeLegalizationCost (RetTy);
1254+ auto *SrcTy = ICA.getArgTypes ().front ();
1255+ auto SrcLT = getTypeLegalizationCost (SrcTy);
12541256 if (ST->hasVInstructions () && LT.second .isVector ()) {
12551257 ArrayRef<unsigned > Ops;
1258+ unsigned SrcEltSz =
1259+ DL.getTypeSizeInBits (cast<VectorType>(SrcTy)->getElementType ());
12561260 unsigned DstEltSz =
12571261 DL.getTypeSizeInBits (cast<VectorType>(RetTy)->getElementType ());
12581262 if (LT.second .getVectorElementType () == MVT::bf16 ) {
1259- if (DstEltSz == 64 && ST->is64Bit ())
1260- // vfwcvtbf16.f.f.v v9, v8
1261- // vfcvt.x.f.v v8, v9
1263+ if (DstEltSz == 32 )
12621264 Ops = {RISCV::VFWCVTBF16_F_F_V, RISCV::VFCVT_X_F_V};
12631265 else
1264- // vfwcvtbf16.f.f.v v9, v8
1265- // vfwcvt.x.f.v v8, v9
12661266 Ops = {RISCV::VFWCVTBF16_F_F_V, RISCV::VFWCVT_X_F_V};
12671267 } else if (LT.second .getVectorElementType () == MVT::f16 &&
12681268 !ST->hasVInstructionsF16 ()) {
1269- if (DstEltSz == 64 && ST->is64Bit ())
1270- // vfwcvt.f.f.v v9, v8
1271- // vfwcvt.x.f.v v8, v9
1272- Ops = {RISCV::VFWCVT_F_F_V, RISCV::VFWCVT_X_F_V};
1273- else
1274- // vfwcvt.f.f.v v9, v8
1275- // vfcvt.x.f.v v8, v9
1269+ if (DstEltSz == 32 )
12761270 Ops = {RISCV::VFWCVT_F_F_V, RISCV::VFCVT_X_F_V};
1271+ else
1272+ Ops = {RISCV::VFWCVT_F_F_V, RISCV::VFWCVT_X_F_V};
12771273
1278- } else if (DstEltSz == 32 && ST->is64Bit ()) {
1279- // vfncvt.x.f.w v10, v8
1280- // vmv.v.v v8, v10
1274+ } else if (SrcEltSz < DstEltSz) {
12811275 Ops = {RISCV::VFNCVT_X_F_W, RISCV::VMV_V_V};
1276+ } else if (SrcEltSz > DstEltSz) {
1277+ Ops = {RISCV::VFWCVT_X_F_V};
12821278 } else {
1283- // vfcvt.x.f.v v8, v8
12841279 Ops = {RISCV::VFCVT_X_F_V};
12851280 }
1286- return LT.first * getRISCVInstructionCost (Ops, LT.second , CostKind);
1281+ return std::max (SrcLT.first , LT.first ) *
1282+ getRISCVInstructionCost (Ops, LT.second , CostKind);
12871283 }
12881284 break ;
12891285 }
0 commit comments