Skip to content

Commit 580b90d

Browse files
committed
[CostModel] Address review
1 parent 7d4fbdc commit 580b90d

File tree

2 files changed

+155
-159
lines changed

2 files changed

+155
-159
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)