[RISCV] Refactor for costs of integer min/max
authorliqinweng <Liqin.Weng@streamcomputing.com>
Mon, 29 Aug 2022 02:10:35 +0000 (10:10 +0800)
committerliqinweng <Liqin.Weng@streamcomputing.com>
Mon, 29 Aug 2022 02:13:50 +0000 (10:13 +0800)
Reviewed By: reames

Differential Revision: https://reviews.llvm.org/D132724

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

index a390182..debf825 100644 (file)
@@ -264,435 +264,311 @@ InstructionCost RISCVTTIImpl::getGatherScatterOpCost(
 // instruction counts with the following adjustments made:
 // * One vsetvli is considered free.
 static const CostTblEntry VectorIntrinsicCostTable[]{
-   {Intrinsic::floor, MVT::v2f32, 15},
-   {Intrinsic::floor, MVT::v4f32, 15},
-   {Intrinsic::floor, MVT::v8f32, 15},
-   {Intrinsic::floor, MVT::v16f32, 15},
-   {Intrinsic::floor, MVT::nxv2f32, 15},
-   {Intrinsic::floor, MVT::nxv4f32, 15},
-   {Intrinsic::floor, MVT::nxv8f32, 15},
-   {Intrinsic::floor, MVT::nxv16f32, 15},
-   {Intrinsic::floor, MVT::v2f64, 15},
-   {Intrinsic::floor, MVT::v4f64, 15},
-   {Intrinsic::floor, MVT::v8f64, 15},
-   {Intrinsic::floor, MVT::v16f64, 15},
-   {Intrinsic::floor, MVT::nxv1f64, 15},
-   {Intrinsic::floor, MVT::nxv2f64, 15},
-   {Intrinsic::floor, MVT::nxv4f64, 15},
-   {Intrinsic::floor, MVT::nxv8f64, 15},
-   {Intrinsic::ceil, MVT::v2f32, 15},
-   {Intrinsic::ceil, MVT::v4f32, 15},
-   {Intrinsic::ceil, MVT::v8f32, 15},
-   {Intrinsic::ceil, MVT::v16f32, 15},
-   {Intrinsic::ceil, MVT::nxv2f32, 15},
-   {Intrinsic::ceil, MVT::nxv4f32, 15},
-   {Intrinsic::ceil, MVT::nxv8f32, 15},
-   {Intrinsic::ceil, MVT::nxv16f32, 15},
-   {Intrinsic::ceil, MVT::v2f64, 15},
-   {Intrinsic::ceil, MVT::v4f64, 15},
-   {Intrinsic::ceil, MVT::v8f64, 15},
-   {Intrinsic::ceil, MVT::v16f64, 15},
-   {Intrinsic::ceil, MVT::nxv1f64, 15},
-   {Intrinsic::ceil, MVT::nxv2f64, 15},
-   {Intrinsic::ceil, MVT::nxv4f64, 15},
-   {Intrinsic::ceil, MVT::nxv8f64, 15},
-   {Intrinsic::trunc, MVT::v2f32, 7},
-   {Intrinsic::trunc, MVT::v4f32, 7},
-   {Intrinsic::trunc, MVT::v8f32, 7},
-   {Intrinsic::trunc, MVT::v16f32, 7},
-   {Intrinsic::trunc, MVT::nxv2f32, 7},
-   {Intrinsic::trunc, MVT::nxv4f32, 7},
-   {Intrinsic::trunc, MVT::nxv8f32, 7},
-   {Intrinsic::trunc, MVT::nxv16f32, 7},
-   {Intrinsic::trunc, MVT::v2f64, 7},
-   {Intrinsic::trunc, MVT::v4f64, 7},
-   {Intrinsic::trunc, MVT::v8f64, 7},
-   {Intrinsic::trunc, MVT::v16f64, 7},
-   {Intrinsic::trunc, MVT::nxv1f64, 7},
-   {Intrinsic::trunc, MVT::nxv2f64, 7},
-   {Intrinsic::trunc, MVT::nxv4f64, 7},
-   {Intrinsic::trunc, MVT::nxv8f64, 7},
-   {Intrinsic::round, MVT::v2f32, 10},
-   {Intrinsic::round, MVT::v4f32, 10},
-   {Intrinsic::round, MVT::v8f32, 10},
-   {Intrinsic::round, MVT::v16f32, 10},
-   {Intrinsic::round, MVT::nxv2f32, 10},
-   {Intrinsic::round, MVT::nxv4f32, 10},
-   {Intrinsic::round, MVT::nxv8f32, 10},
-   {Intrinsic::round, MVT::nxv16f32, 10},
-   {Intrinsic::round, MVT::v2f64, 10},
-   {Intrinsic::round, MVT::v4f64, 10},
-   {Intrinsic::round, MVT::v8f64, 10},
-   {Intrinsic::round, MVT::v16f64, 10},
-   {Intrinsic::round, MVT::nxv1f64, 10},
-   {Intrinsic::round, MVT::nxv2f64, 10},
-   {Intrinsic::round, MVT::nxv4f64, 10},
-   {Intrinsic::round, MVT::nxv8f64, 10},
-   {Intrinsic::fabs, MVT::v2f32, 1},
-   {Intrinsic::fabs, MVT::v4f32, 1},
-   {Intrinsic::fabs, MVT::v8f32, 1},
-   {Intrinsic::fabs, MVT::v16f32, 1},
-   {Intrinsic::fabs, MVT::nxv2f32, 1},
-   {Intrinsic::fabs, MVT::nxv4f32, 1},
-   {Intrinsic::fabs, MVT::nxv8f32, 1},
-   {Intrinsic::fabs, MVT::nxv16f32, 1},
-   {Intrinsic::fabs, MVT::v2f64, 1},
-   {Intrinsic::fabs, MVT::v4f64, 1},
-   {Intrinsic::fabs, MVT::v8f64, 1},
-   {Intrinsic::fabs, MVT::v16f64, 1},
-   {Intrinsic::fabs, MVT::nxv1f64, 1},
-   {Intrinsic::fabs, MVT::nxv2f64, 1},
-   {Intrinsic::fabs, MVT::nxv4f64, 1},
-   {Intrinsic::fabs, MVT::nxv8f64, 1},
-   {Intrinsic::sqrt, MVT::v2f32, 1},
-   {Intrinsic::sqrt, MVT::v4f32, 1},
-   {Intrinsic::sqrt, MVT::v8f32, 1},
-   {Intrinsic::sqrt, MVT::v16f32, 1},
-   {Intrinsic::sqrt, MVT::nxv2f32, 1},
-   {Intrinsic::sqrt, MVT::nxv4f32, 1},
-   {Intrinsic::sqrt, MVT::nxv8f32, 1},
-   {Intrinsic::sqrt, MVT::nxv16f32, 1},
-   {Intrinsic::sqrt, MVT::v2f64, 1},
-   {Intrinsic::sqrt, MVT::v4f64, 1},
-   {Intrinsic::sqrt, MVT::v8f64, 1},
-   {Intrinsic::sqrt, MVT::v16f64, 1},
-   {Intrinsic::sqrt, MVT::nxv1f64, 1},
-   {Intrinsic::sqrt, MVT::nxv2f64, 1},
-   {Intrinsic::sqrt, MVT::nxv4f64, 1},
-   {Intrinsic::sqrt, MVT::nxv8f64, 1},
-   {Intrinsic::bswap, MVT::v2i16, 3},
-   {Intrinsic::bswap, MVT::v4i16, 3},
-   {Intrinsic::bswap, MVT::v8i16, 3},
-   {Intrinsic::bswap, MVT::v16i16, 3},
-   {Intrinsic::bswap, MVT::nxv2i16, 3},
-   {Intrinsic::bswap, MVT::nxv4i16, 3},
-   {Intrinsic::bswap, MVT::nxv8i16, 3},
-   {Intrinsic::bswap, MVT::nxv16i16, 3},
-   {Intrinsic::bswap, MVT::v2i32, 12},
-   {Intrinsic::bswap, MVT::v4i32, 12},
-   {Intrinsic::bswap, MVT::v8i32, 12},
-   {Intrinsic::bswap, MVT::v16i32, 12},
-   {Intrinsic::bswap, MVT::nxv2i32, 12},
-   {Intrinsic::bswap, MVT::nxv4i32, 12},
-   {Intrinsic::bswap, MVT::nxv8i32, 12},
-   {Intrinsic::bswap, MVT::nxv16i32, 12},
-   {Intrinsic::bswap, MVT::v2i64, 31},
-   {Intrinsic::bswap, MVT::v4i64, 31},
-   {Intrinsic::bswap, MVT::v8i64, 31},
-   {Intrinsic::bswap, MVT::v16i64, 31},
-   {Intrinsic::bswap, MVT::nxv2i64, 31},
-   {Intrinsic::bswap, MVT::nxv4i64, 31},
-   {Intrinsic::bswap, MVT::nxv8i64, 31},
-   {Intrinsic::bitreverse, MVT::v2i8, 17},
-   {Intrinsic::bitreverse, MVT::v4i8, 17},
-   {Intrinsic::bitreverse, MVT::v8i8, 17},
-   {Intrinsic::bitreverse, MVT::v16i8, 17},
-   {Intrinsic::bitreverse, MVT::nxv2i8, 17},
-   {Intrinsic::bitreverse, MVT::nxv4i8, 17},
-   {Intrinsic::bitreverse, MVT::nxv8i8, 17},
-   {Intrinsic::bitreverse, MVT::nxv16i8, 17},
-   {Intrinsic::bitreverse, MVT::v2i16, 24},
-   {Intrinsic::bitreverse, MVT::v4i16, 24},
-   {Intrinsic::bitreverse, MVT::v8i16, 24},
-   {Intrinsic::bitreverse, MVT::v16i16, 24},
-   {Intrinsic::bitreverse, MVT::nxv2i16, 24},
-   {Intrinsic::bitreverse, MVT::nxv4i16, 24},
-   {Intrinsic::bitreverse, MVT::nxv8i16, 24},
-   {Intrinsic::bitreverse, MVT::nxv16i16, 24},
-   {Intrinsic::bitreverse, MVT::v2i32, 33},
-   {Intrinsic::bitreverse, MVT::v4i32, 33},
-   {Intrinsic::bitreverse, MVT::v8i32, 33},
-   {Intrinsic::bitreverse, MVT::v16i32, 33},
-   {Intrinsic::bitreverse, MVT::nxv2i32, 33},
-   {Intrinsic::bitreverse, MVT::nxv4i32, 33},
-   {Intrinsic::bitreverse, MVT::nxv8i32, 33},
-   {Intrinsic::bitreverse, MVT::nxv16i32, 33},
-   {Intrinsic::bitreverse, MVT::v2i64, 52},
-   {Intrinsic::bitreverse, MVT::v4i64, 52},
-   {Intrinsic::bitreverse, MVT::v8i64, 52},
-   {Intrinsic::bitreverse, MVT::v16i64, 52},
-   {Intrinsic::bitreverse, MVT::nxv2i64, 52},
-   {Intrinsic::bitreverse, MVT::nxv4i64, 52},
-   {Intrinsic::bitreverse, MVT::nxv8i64, 52},
-   {Intrinsic::ctpop, MVT::v2i8, 12},
-   {Intrinsic::ctpop, MVT::v4i8, 12},
-   {Intrinsic::ctpop, MVT::v8i8, 12},
-   {Intrinsic::ctpop, MVT::v16i8, 12},
-   {Intrinsic::ctpop, MVT::nxv2i8, 12},
-   {Intrinsic::ctpop, MVT::nxv4i8, 12},
-   {Intrinsic::ctpop, MVT::nxv8i8, 12},
-   {Intrinsic::ctpop, MVT::nxv16i8, 12},
-   {Intrinsic::ctpop, MVT::v2i16, 19},
-   {Intrinsic::ctpop, MVT::v4i16, 19},
-   {Intrinsic::ctpop, MVT::v8i16, 19},
-   {Intrinsic::ctpop, MVT::v16i16, 19},
-   {Intrinsic::ctpop, MVT::nxv2i16, 19},
-   {Intrinsic::ctpop, MVT::nxv4i16, 19},
-   {Intrinsic::ctpop, MVT::nxv8i16, 19},
-   {Intrinsic::ctpop, MVT::nxv16i16, 19},
-   {Intrinsic::ctpop, MVT::v2i32, 20},
-   {Intrinsic::ctpop, MVT::v4i32, 20},
-   {Intrinsic::ctpop, MVT::v8i32, 20},
-   {Intrinsic::ctpop, MVT::v16i32, 20},
-   {Intrinsic::ctpop, MVT::nxv2i32, 20},
-   {Intrinsic::ctpop, MVT::nxv4i32, 20},
-   {Intrinsic::ctpop, MVT::nxv8i32, 20},
-   {Intrinsic::ctpop, MVT::nxv16i32, 20},
-   {Intrinsic::ctpop, MVT::v2i64, 21},
-   {Intrinsic::ctpop, MVT::v4i64, 21},
-   {Intrinsic::ctpop, MVT::v8i64, 21},
-   {Intrinsic::ctpop, MVT::v16i64, 21},
-   {Intrinsic::ctpop, MVT::nxv2i64, 21},
-   {Intrinsic::ctpop, MVT::nxv4i64, 21},
-   {Intrinsic::ctpop, MVT::nxv8i64, 21},
-   {Intrinsic::smax, MVT::v2i8, 1},
-   {Intrinsic::smax, MVT::v4i8, 1},
-   {Intrinsic::smax, MVT::v8i8, 1},
-   {Intrinsic::smax, MVT::v16i8, 1},
-   {Intrinsic::smax, MVT::nxv2i8, 1},
-   {Intrinsic::smax, MVT::nxv4i8, 1},
-   {Intrinsic::smax, MVT::nxv8i8, 1},
-   {Intrinsic::smax, MVT::nxv16i8, 1},
-   {Intrinsic::smax, MVT::v2i16, 1},
-   {Intrinsic::smax, MVT::v4i16, 1},
-   {Intrinsic::smax, MVT::v8i16, 1},
-   {Intrinsic::smax, MVT::v16i16, 1},
-   {Intrinsic::smax, MVT::nxv2i16, 1},
-   {Intrinsic::smax, MVT::nxv4i16, 1},
-   {Intrinsic::smax, MVT::nxv8i16, 1},
-   {Intrinsic::smax, MVT::nxv16i16, 1},
-   {Intrinsic::smax, MVT::v2i32, 1},
-   {Intrinsic::smax, MVT::v4i32, 1},
-   {Intrinsic::smax, MVT::v8i32, 1},
-   {Intrinsic::smax, MVT::v16i32, 1},
-   {Intrinsic::smax, MVT::nxv2i32, 1},
-   {Intrinsic::smax, MVT::nxv4i32, 1},
-   {Intrinsic::smax, MVT::nxv8i32, 1},
-   {Intrinsic::smax, MVT::nxv16i32, 1},
-   {Intrinsic::smax, MVT::v2i64, 1},
-   {Intrinsic::smax, MVT::v4i64, 1},
-   {Intrinsic::smax, MVT::v8i64, 1},
-   {Intrinsic::smax, MVT::v16i64, 1},
-   {Intrinsic::smax, MVT::nxv2i64, 1},
-   {Intrinsic::smax, MVT::nxv4i64, 1},
-   {Intrinsic::smax, MVT::nxv8i64, 1},
-   {Intrinsic::smin, MVT::v2i8, 1},
-   {Intrinsic::smin, MVT::v4i8, 1},
-   {Intrinsic::smin, MVT::v8i8, 1},
-   {Intrinsic::smin, MVT::v16i8, 1},
-   {Intrinsic::smin, MVT::nxv2i8, 1},
-   {Intrinsic::smin, MVT::nxv4i8, 1},
-   {Intrinsic::smin, MVT::nxv8i8, 1},
-   {Intrinsic::smin, MVT::nxv16i8, 1},
-   {Intrinsic::smin, MVT::v2i16, 1},
-   {Intrinsic::smin, MVT::v4i16, 1},
-   {Intrinsic::smin, MVT::v8i16, 1},
-   {Intrinsic::smin, MVT::v16i16, 1},
-   {Intrinsic::smin, MVT::nxv2i16, 1},
-   {Intrinsic::smin, MVT::nxv4i16, 1},
-   {Intrinsic::smin, MVT::nxv8i16, 1},
-   {Intrinsic::smin, MVT::nxv16i16, 1},
-   {Intrinsic::smin, MVT::v2i32, 1},
-   {Intrinsic::smin, MVT::v4i32, 1},
-   {Intrinsic::smin, MVT::v8i32, 1},
-   {Intrinsic::smin, MVT::v16i32, 1},
-   {Intrinsic::smin, MVT::nxv2i32, 1},
-   {Intrinsic::smin, MVT::nxv4i32, 1},
-   {Intrinsic::smin, MVT::nxv8i32, 1},
-   {Intrinsic::smin, MVT::nxv16i32, 1},
-   {Intrinsic::smin, MVT::v2i64, 1},
-   {Intrinsic::smin, MVT::v4i64, 1},
-   {Intrinsic::smin, MVT::v8i64, 1},
-   {Intrinsic::smin, MVT::v16i64, 1},
-   {Intrinsic::smin, MVT::nxv2i64, 1},
-   {Intrinsic::smin, MVT::nxv4i64, 1},
-   {Intrinsic::smin, MVT::nxv8i64, 1},
-   {Intrinsic::umax, MVT::v2i8, 1},
-   {Intrinsic::umax, MVT::v4i8, 1},
-   {Intrinsic::umax, MVT::v8i8, 1},
-   {Intrinsic::umax, MVT::v16i8, 1},
-   {Intrinsic::umax, MVT::nxv2i8, 1},
-   {Intrinsic::umax, MVT::nxv4i8, 1},
-   {Intrinsic::umax, MVT::nxv8i8, 1},
-   {Intrinsic::umax, MVT::nxv16i8, 1},
-   {Intrinsic::umax, MVT::v2i16, 1},
-   {Intrinsic::umax, MVT::v4i16, 1},
-   {Intrinsic::umax, MVT::v8i16, 1},
-   {Intrinsic::umax, MVT::v16i16, 1},
-   {Intrinsic::umax, MVT::nxv2i16, 1},
-   {Intrinsic::umax, MVT::nxv4i16, 1},
-   {Intrinsic::umax, MVT::nxv8i16, 1},
-   {Intrinsic::umax, MVT::nxv16i16, 1},
-   {Intrinsic::umax, MVT::v2i32, 1},
-   {Intrinsic::umax, MVT::v4i32, 1},
-   {Intrinsic::umax, MVT::v8i32, 1},
-   {Intrinsic::umax, MVT::v16i32, 1},
-   {Intrinsic::umax, MVT::nxv2i32, 1},
-   {Intrinsic::umax, MVT::nxv4i32, 1},
-   {Intrinsic::umax, MVT::nxv8i32, 1},
-   {Intrinsic::umax, MVT::nxv16i32, 1},
-   {Intrinsic::umax, MVT::v2i64, 1},
-   {Intrinsic::umax, MVT::v4i64, 1},
-   {Intrinsic::umax, MVT::v8i64, 1},
-   {Intrinsic::umax, MVT::v16i64, 1},
-   {Intrinsic::umax, MVT::nxv2i64, 1},
-   {Intrinsic::umax, MVT::nxv4i64, 1},
-   {Intrinsic::umax, MVT::nxv8i64, 1},
-   {Intrinsic::umin, MVT::v2i8, 1},
-   {Intrinsic::umin, MVT::v4i8, 1},
-   {Intrinsic::umin, MVT::v8i8, 1},
-   {Intrinsic::umin, MVT::v16i8, 1},
-   {Intrinsic::umin, MVT::nxv2i8, 1},
-   {Intrinsic::umin, MVT::nxv4i8, 1},
-   {Intrinsic::umin, MVT::nxv8i8, 1},
-   {Intrinsic::umin, MVT::nxv16i8, 1},
-   {Intrinsic::umin, MVT::v2i16, 1},
-   {Intrinsic::umin, MVT::v4i16, 1},
-   {Intrinsic::umin, MVT::v8i16, 1},
-   {Intrinsic::umin, MVT::v16i16, 1},
-   {Intrinsic::umin, MVT::nxv2i16, 1},
-   {Intrinsic::umin, MVT::nxv4i16, 1},
-   {Intrinsic::umin, MVT::nxv8i16, 1},
-   {Intrinsic::umin, MVT::nxv16i16, 1},
-   {Intrinsic::umin, MVT::v2i32, 1},
-   {Intrinsic::umin, MVT::v4i32, 1},
-   {Intrinsic::umin, MVT::v8i32, 1},
-   {Intrinsic::umin, MVT::v16i32, 1},
-   {Intrinsic::umin, MVT::nxv2i32, 1},
-   {Intrinsic::umin, MVT::nxv4i32, 1},
-   {Intrinsic::umin, MVT::nxv8i32, 1},
-   {Intrinsic::umin, MVT::nxv16i32, 1},
-   {Intrinsic::umin, MVT::v2i64, 1},
-   {Intrinsic::umin, MVT::v4i64, 1},
-   {Intrinsic::umin, MVT::v8i64, 1},
-   {Intrinsic::umin, MVT::v16i64, 1},
-   {Intrinsic::umin, MVT::nxv2i64, 1},
-   {Intrinsic::umin, MVT::nxv4i64, 1},
-   {Intrinsic::umin, MVT::nxv8i64, 1},
-   {Intrinsic::sadd_sat, MVT::v2i8, 1},
-   {Intrinsic::sadd_sat, MVT::v4i8, 1},
-   {Intrinsic::sadd_sat, MVT::v8i8, 1},
-   {Intrinsic::sadd_sat, MVT::v16i8, 1},
-   {Intrinsic::sadd_sat, MVT::nxv2i8, 1},
-   {Intrinsic::sadd_sat, MVT::nxv4i8, 1},
-   {Intrinsic::sadd_sat, MVT::nxv8i8, 1},
-   {Intrinsic::sadd_sat, MVT::nxv16i8, 1},
-   {Intrinsic::sadd_sat, MVT::v2i16, 1},
-   {Intrinsic::sadd_sat, MVT::v4i16, 1},
-   {Intrinsic::sadd_sat, MVT::v8i16, 1},
-   {Intrinsic::sadd_sat, MVT::v16i16, 1},
-   {Intrinsic::sadd_sat, MVT::nxv2i16, 1},
-   {Intrinsic::sadd_sat, MVT::nxv4i16, 1},
-   {Intrinsic::sadd_sat, MVT::nxv8i16, 1},
-   {Intrinsic::sadd_sat, MVT::nxv16i16, 1},
-   {Intrinsic::sadd_sat, MVT::v2i32, 1},
-   {Intrinsic::sadd_sat, MVT::v4i32, 1},
-   {Intrinsic::sadd_sat, MVT::v8i32, 1},
-   {Intrinsic::sadd_sat, MVT::v16i32, 1},
-   {Intrinsic::sadd_sat, MVT::nxv2i32, 1},
-   {Intrinsic::sadd_sat, MVT::nxv4i32, 1},
-   {Intrinsic::sadd_sat, MVT::nxv8i32, 1},
-   {Intrinsic::sadd_sat, MVT::nxv16i32, 1},
-   {Intrinsic::sadd_sat, MVT::v2i64, 1},
-   {Intrinsic::sadd_sat, MVT::v4i64, 1},
-   {Intrinsic::sadd_sat, MVT::v8i64, 1},
-   {Intrinsic::sadd_sat, MVT::v16i64, 1},
-   {Intrinsic::sadd_sat, MVT::nxv2i64, 1},
-   {Intrinsic::sadd_sat, MVT::nxv4i64, 1},
-   {Intrinsic::sadd_sat, MVT::nxv8i64, 1},
-   {Intrinsic::uadd_sat, MVT::v2i8, 1},
-   {Intrinsic::uadd_sat, MVT::v4i8, 1},
-   {Intrinsic::uadd_sat, MVT::v8i8, 1},
-   {Intrinsic::uadd_sat, MVT::v16i8, 1},
-   {Intrinsic::uadd_sat, MVT::nxv2i8, 1},
-   {Intrinsic::uadd_sat, MVT::nxv4i8, 1},
-   {Intrinsic::uadd_sat, MVT::nxv8i8, 1},
-   {Intrinsic::uadd_sat, MVT::nxv16i8, 1},
-   {Intrinsic::uadd_sat, MVT::v2i16, 1},
-   {Intrinsic::uadd_sat, MVT::v4i16, 1},
-   {Intrinsic::uadd_sat, MVT::v8i16, 1},
-   {Intrinsic::uadd_sat, MVT::v16i16, 1},
-   {Intrinsic::uadd_sat, MVT::nxv2i16, 1},
-   {Intrinsic::uadd_sat, MVT::nxv4i16, 1},
-   {Intrinsic::uadd_sat, MVT::nxv8i16, 1},
-   {Intrinsic::uadd_sat, MVT::nxv16i16, 1},
-   {Intrinsic::uadd_sat, MVT::v2i32, 1},
-   {Intrinsic::uadd_sat, MVT::v4i32, 1},
-   {Intrinsic::uadd_sat, MVT::v8i32, 1},
-   {Intrinsic::uadd_sat, MVT::v16i32, 1},
-   {Intrinsic::uadd_sat, MVT::nxv2i32, 1},
-   {Intrinsic::uadd_sat, MVT::nxv4i32, 1},
-   {Intrinsic::uadd_sat, MVT::nxv8i32, 1},
-   {Intrinsic::uadd_sat, MVT::nxv16i32, 1},
-   {Intrinsic::uadd_sat, MVT::v2i64, 1},
-   {Intrinsic::uadd_sat, MVT::v4i64, 1},
-   {Intrinsic::uadd_sat, MVT::v8i64, 1},
-   {Intrinsic::uadd_sat, MVT::v16i64, 1},
-   {Intrinsic::uadd_sat, MVT::nxv2i64, 1},
-   {Intrinsic::uadd_sat, MVT::nxv4i64, 1},
-   {Intrinsic::uadd_sat, MVT::nxv8i64, 1},
-   {Intrinsic::usub_sat, MVT::v2i8, 1},
-   {Intrinsic::usub_sat, MVT::v4i8, 1},
-   {Intrinsic::usub_sat, MVT::v8i8, 1},
-   {Intrinsic::usub_sat, MVT::v16i8, 1},
-   {Intrinsic::usub_sat, MVT::nxv2i8, 1},
-   {Intrinsic::usub_sat, MVT::nxv4i8, 1},
-   {Intrinsic::usub_sat, MVT::nxv8i8, 1},
-   {Intrinsic::usub_sat, MVT::nxv16i8, 1},
-   {Intrinsic::usub_sat, MVT::v2i16, 1},
-   {Intrinsic::usub_sat, MVT::v4i16, 1},
-   {Intrinsic::usub_sat, MVT::v8i16, 1},
-   {Intrinsic::usub_sat, MVT::v16i16, 1},
-   {Intrinsic::usub_sat, MVT::nxv2i16, 1},
-   {Intrinsic::usub_sat, MVT::nxv4i16, 1},
-   {Intrinsic::usub_sat, MVT::nxv8i16, 1},
-   {Intrinsic::usub_sat, MVT::nxv16i16, 1},
-   {Intrinsic::usub_sat, MVT::v2i32, 1},
-   {Intrinsic::usub_sat, MVT::v4i32, 1},
-   {Intrinsic::usub_sat, MVT::v8i32, 1},
-   {Intrinsic::usub_sat, MVT::v16i32, 1},
-   {Intrinsic::usub_sat, MVT::nxv2i32, 1},
-   {Intrinsic::usub_sat, MVT::nxv4i32, 1},
-   {Intrinsic::usub_sat, MVT::nxv8i32, 1},
-   {Intrinsic::usub_sat, MVT::nxv16i32, 1},
-   {Intrinsic::usub_sat, MVT::v2i64, 1},
-   {Intrinsic::usub_sat, MVT::v4i64, 1},
-   {Intrinsic::usub_sat, MVT::v8i64, 1},
-   {Intrinsic::usub_sat, MVT::v16i64, 1},
-   {Intrinsic::usub_sat, MVT::nxv2i64, 1},
-   {Intrinsic::usub_sat, MVT::nxv4i64, 1},
-   {Intrinsic::usub_sat, MVT::nxv8i64, 1},
-   {Intrinsic::ssub_sat, MVT::v2i8, 1},
-   {Intrinsic::ssub_sat, MVT::v4i8, 1},
-   {Intrinsic::ssub_sat, MVT::v8i8, 1},
-   {Intrinsic::ssub_sat, MVT::v16i8, 1},
-   {Intrinsic::ssub_sat, MVT::nxv2i8, 1},
-   {Intrinsic::ssub_sat, MVT::nxv4i8, 1},
-   {Intrinsic::ssub_sat, MVT::nxv8i8, 1},
-   {Intrinsic::ssub_sat, MVT::nxv16i8, 1},
-   {Intrinsic::ssub_sat, MVT::v2i16, 1},
-   {Intrinsic::ssub_sat, MVT::v4i16, 1},
-   {Intrinsic::ssub_sat, MVT::v8i16, 1},
-   {Intrinsic::ssub_sat, MVT::v16i16, 1},
-   {Intrinsic::ssub_sat, MVT::nxv2i16, 1},
-   {Intrinsic::ssub_sat, MVT::nxv4i16, 1},
-   {Intrinsic::ssub_sat, MVT::nxv8i16, 1},
-   {Intrinsic::ssub_sat, MVT::nxv16i16, 1},
-   {Intrinsic::ssub_sat, MVT::v2i32, 1},
-   {Intrinsic::ssub_sat, MVT::v4i32, 1},
-   {Intrinsic::ssub_sat, MVT::v8i32, 1},
-   {Intrinsic::ssub_sat, MVT::v16i32, 1},
-   {Intrinsic::ssub_sat, MVT::nxv2i32, 1},
-   {Intrinsic::ssub_sat, MVT::nxv4i32, 1},
-   {Intrinsic::ssub_sat, MVT::nxv8i32, 1},
-   {Intrinsic::ssub_sat, MVT::nxv16i32, 1},
-   {Intrinsic::ssub_sat, MVT::v2i64, 1},
-   {Intrinsic::ssub_sat, MVT::v4i64, 1},
-   {Intrinsic::ssub_sat, MVT::v8i64, 1},
-   {Intrinsic::ssub_sat, MVT::v16i64, 1},
-   {Intrinsic::ssub_sat, MVT::nxv2i64, 1},
-   {Intrinsic::ssub_sat, MVT::nxv4i64, 1},
-   {Intrinsic::ssub_sat, MVT::nxv8i64, 1},
+    {Intrinsic::floor, MVT::v2f32, 15},
+    {Intrinsic::floor, MVT::v4f32, 15},
+    {Intrinsic::floor, MVT::v8f32, 15},
+    {Intrinsic::floor, MVT::v16f32, 15},
+    {Intrinsic::floor, MVT::nxv2f32, 15},
+    {Intrinsic::floor, MVT::nxv4f32, 15},
+    {Intrinsic::floor, MVT::nxv8f32, 15},
+    {Intrinsic::floor, MVT::nxv16f32, 15},
+    {Intrinsic::floor, MVT::v2f64, 15},
+    {Intrinsic::floor, MVT::v4f64, 15},
+    {Intrinsic::floor, MVT::v8f64, 15},
+    {Intrinsic::floor, MVT::v16f64, 15},
+    {Intrinsic::floor, MVT::nxv1f64, 15},
+    {Intrinsic::floor, MVT::nxv2f64, 15},
+    {Intrinsic::floor, MVT::nxv4f64, 15},
+    {Intrinsic::floor, MVT::nxv8f64, 15},
+    {Intrinsic::ceil, MVT::v2f32, 15},
+    {Intrinsic::ceil, MVT::v4f32, 15},
+    {Intrinsic::ceil, MVT::v8f32, 15},
+    {Intrinsic::ceil, MVT::v16f32, 15},
+    {Intrinsic::ceil, MVT::nxv2f32, 15},
+    {Intrinsic::ceil, MVT::nxv4f32, 15},
+    {Intrinsic::ceil, MVT::nxv8f32, 15},
+    {Intrinsic::ceil, MVT::nxv16f32, 15},
+    {Intrinsic::ceil, MVT::v2f64, 15},
+    {Intrinsic::ceil, MVT::v4f64, 15},
+    {Intrinsic::ceil, MVT::v8f64, 15},
+    {Intrinsic::ceil, MVT::v16f64, 15},
+    {Intrinsic::ceil, MVT::nxv1f64, 15},
+    {Intrinsic::ceil, MVT::nxv2f64, 15},
+    {Intrinsic::ceil, MVT::nxv4f64, 15},
+    {Intrinsic::ceil, MVT::nxv8f64, 15},
+    {Intrinsic::trunc, MVT::v2f32, 7},
+    {Intrinsic::trunc, MVT::v4f32, 7},
+    {Intrinsic::trunc, MVT::v8f32, 7},
+    {Intrinsic::trunc, MVT::v16f32, 7},
+    {Intrinsic::trunc, MVT::nxv2f32, 7},
+    {Intrinsic::trunc, MVT::nxv4f32, 7},
+    {Intrinsic::trunc, MVT::nxv8f32, 7},
+    {Intrinsic::trunc, MVT::nxv16f32, 7},
+    {Intrinsic::trunc, MVT::v2f64, 7},
+    {Intrinsic::trunc, MVT::v4f64, 7},
+    {Intrinsic::trunc, MVT::v8f64, 7},
+    {Intrinsic::trunc, MVT::v16f64, 7},
+    {Intrinsic::trunc, MVT::nxv1f64, 7},
+    {Intrinsic::trunc, MVT::nxv2f64, 7},
+    {Intrinsic::trunc, MVT::nxv4f64, 7},
+    {Intrinsic::trunc, MVT::nxv8f64, 7},
+    {Intrinsic::round, MVT::v2f32, 10},
+    {Intrinsic::round, MVT::v4f32, 10},
+    {Intrinsic::round, MVT::v8f32, 10},
+    {Intrinsic::round, MVT::v16f32, 10},
+    {Intrinsic::round, MVT::nxv2f32, 10},
+    {Intrinsic::round, MVT::nxv4f32, 10},
+    {Intrinsic::round, MVT::nxv8f32, 10},
+    {Intrinsic::round, MVT::nxv16f32, 10},
+    {Intrinsic::round, MVT::v2f64, 10},
+    {Intrinsic::round, MVT::v4f64, 10},
+    {Intrinsic::round, MVT::v8f64, 10},
+    {Intrinsic::round, MVT::v16f64, 10},
+    {Intrinsic::round, MVT::nxv1f64, 10},
+    {Intrinsic::round, MVT::nxv2f64, 10},
+    {Intrinsic::round, MVT::nxv4f64, 10},
+    {Intrinsic::round, MVT::nxv8f64, 10},
+    {Intrinsic::fabs, MVT::v2f32, 1},
+    {Intrinsic::fabs, MVT::v4f32, 1},
+    {Intrinsic::fabs, MVT::v8f32, 1},
+    {Intrinsic::fabs, MVT::v16f32, 1},
+    {Intrinsic::fabs, MVT::nxv2f32, 1},
+    {Intrinsic::fabs, MVT::nxv4f32, 1},
+    {Intrinsic::fabs, MVT::nxv8f32, 1},
+    {Intrinsic::fabs, MVT::nxv16f32, 1},
+    {Intrinsic::fabs, MVT::v2f64, 1},
+    {Intrinsic::fabs, MVT::v4f64, 1},
+    {Intrinsic::fabs, MVT::v8f64, 1},
+    {Intrinsic::fabs, MVT::v16f64, 1},
+    {Intrinsic::fabs, MVT::nxv1f64, 1},
+    {Intrinsic::fabs, MVT::nxv2f64, 1},
+    {Intrinsic::fabs, MVT::nxv4f64, 1},
+    {Intrinsic::fabs, MVT::nxv8f64, 1},
+    {Intrinsic::sqrt, MVT::v2f32, 1},
+    {Intrinsic::sqrt, MVT::v4f32, 1},
+    {Intrinsic::sqrt, MVT::v8f32, 1},
+    {Intrinsic::sqrt, MVT::v16f32, 1},
+    {Intrinsic::sqrt, MVT::nxv2f32, 1},
+    {Intrinsic::sqrt, MVT::nxv4f32, 1},
+    {Intrinsic::sqrt, MVT::nxv8f32, 1},
+    {Intrinsic::sqrt, MVT::nxv16f32, 1},
+    {Intrinsic::sqrt, MVT::v2f64, 1},
+    {Intrinsic::sqrt, MVT::v4f64, 1},
+    {Intrinsic::sqrt, MVT::v8f64, 1},
+    {Intrinsic::sqrt, MVT::v16f64, 1},
+    {Intrinsic::sqrt, MVT::nxv1f64, 1},
+    {Intrinsic::sqrt, MVT::nxv2f64, 1},
+    {Intrinsic::sqrt, MVT::nxv4f64, 1},
+    {Intrinsic::sqrt, MVT::nxv8f64, 1},
+    {Intrinsic::bswap, MVT::v2i16, 3},
+    {Intrinsic::bswap, MVT::v4i16, 3},
+    {Intrinsic::bswap, MVT::v8i16, 3},
+    {Intrinsic::bswap, MVT::v16i16, 3},
+    {Intrinsic::bswap, MVT::nxv2i16, 3},
+    {Intrinsic::bswap, MVT::nxv4i16, 3},
+    {Intrinsic::bswap, MVT::nxv8i16, 3},
+    {Intrinsic::bswap, MVT::nxv16i16, 3},
+    {Intrinsic::bswap, MVT::v2i32, 12},
+    {Intrinsic::bswap, MVT::v4i32, 12},
+    {Intrinsic::bswap, MVT::v8i32, 12},
+    {Intrinsic::bswap, MVT::v16i32, 12},
+    {Intrinsic::bswap, MVT::nxv2i32, 12},
+    {Intrinsic::bswap, MVT::nxv4i32, 12},
+    {Intrinsic::bswap, MVT::nxv8i32, 12},
+    {Intrinsic::bswap, MVT::nxv16i32, 12},
+    {Intrinsic::bswap, MVT::v2i64, 31},
+    {Intrinsic::bswap, MVT::v4i64, 31},
+    {Intrinsic::bswap, MVT::v8i64, 31},
+    {Intrinsic::bswap, MVT::v16i64, 31},
+    {Intrinsic::bswap, MVT::nxv2i64, 31},
+    {Intrinsic::bswap, MVT::nxv4i64, 31},
+    {Intrinsic::bswap, MVT::nxv8i64, 31},
+    {Intrinsic::bitreverse, MVT::v2i8, 17},
+    {Intrinsic::bitreverse, MVT::v4i8, 17},
+    {Intrinsic::bitreverse, MVT::v8i8, 17},
+    {Intrinsic::bitreverse, MVT::v16i8, 17},
+    {Intrinsic::bitreverse, MVT::nxv2i8, 17},
+    {Intrinsic::bitreverse, MVT::nxv4i8, 17},
+    {Intrinsic::bitreverse, MVT::nxv8i8, 17},
+    {Intrinsic::bitreverse, MVT::nxv16i8, 17},
+    {Intrinsic::bitreverse, MVT::v2i16, 24},
+    {Intrinsic::bitreverse, MVT::v4i16, 24},
+    {Intrinsic::bitreverse, MVT::v8i16, 24},
+    {Intrinsic::bitreverse, MVT::v16i16, 24},
+    {Intrinsic::bitreverse, MVT::nxv2i16, 24},
+    {Intrinsic::bitreverse, MVT::nxv4i16, 24},
+    {Intrinsic::bitreverse, MVT::nxv8i16, 24},
+    {Intrinsic::bitreverse, MVT::nxv16i16, 24},
+    {Intrinsic::bitreverse, MVT::v2i32, 33},
+    {Intrinsic::bitreverse, MVT::v4i32, 33},
+    {Intrinsic::bitreverse, MVT::v8i32, 33},
+    {Intrinsic::bitreverse, MVT::v16i32, 33},
+    {Intrinsic::bitreverse, MVT::nxv2i32, 33},
+    {Intrinsic::bitreverse, MVT::nxv4i32, 33},
+    {Intrinsic::bitreverse, MVT::nxv8i32, 33},
+    {Intrinsic::bitreverse, MVT::nxv16i32, 33},
+    {Intrinsic::bitreverse, MVT::v2i64, 52},
+    {Intrinsic::bitreverse, MVT::v4i64, 52},
+    {Intrinsic::bitreverse, MVT::v8i64, 52},
+    {Intrinsic::bitreverse, MVT::v16i64, 52},
+    {Intrinsic::bitreverse, MVT::nxv2i64, 52},
+    {Intrinsic::bitreverse, MVT::nxv4i64, 52},
+    {Intrinsic::bitreverse, MVT::nxv8i64, 52},
+    {Intrinsic::ctpop, MVT::v2i8, 12},
+    {Intrinsic::ctpop, MVT::v4i8, 12},
+    {Intrinsic::ctpop, MVT::v8i8, 12},
+    {Intrinsic::ctpop, MVT::v16i8, 12},
+    {Intrinsic::ctpop, MVT::nxv2i8, 12},
+    {Intrinsic::ctpop, MVT::nxv4i8, 12},
+    {Intrinsic::ctpop, MVT::nxv8i8, 12},
+    {Intrinsic::ctpop, MVT::nxv16i8, 12},
+    {Intrinsic::ctpop, MVT::v2i16, 19},
+    {Intrinsic::ctpop, MVT::v4i16, 19},
+    {Intrinsic::ctpop, MVT::v8i16, 19},
+    {Intrinsic::ctpop, MVT::v16i16, 19},
+    {Intrinsic::ctpop, MVT::nxv2i16, 19},
+    {Intrinsic::ctpop, MVT::nxv4i16, 19},
+    {Intrinsic::ctpop, MVT::nxv8i16, 19},
+    {Intrinsic::ctpop, MVT::nxv16i16, 19},
+    {Intrinsic::ctpop, MVT::v2i32, 20},
+    {Intrinsic::ctpop, MVT::v4i32, 20},
+    {Intrinsic::ctpop, MVT::v8i32, 20},
+    {Intrinsic::ctpop, MVT::v16i32, 20},
+    {Intrinsic::ctpop, MVT::nxv2i32, 20},
+    {Intrinsic::ctpop, MVT::nxv4i32, 20},
+    {Intrinsic::ctpop, MVT::nxv8i32, 20},
+    {Intrinsic::ctpop, MVT::nxv16i32, 20},
+    {Intrinsic::ctpop, MVT::v2i64, 21},
+    {Intrinsic::ctpop, MVT::v4i64, 21},
+    {Intrinsic::ctpop, MVT::v8i64, 21},
+    {Intrinsic::ctpop, MVT::v16i64, 21},
+    {Intrinsic::ctpop, MVT::nxv2i64, 21},
+    {Intrinsic::ctpop, MVT::nxv4i64, 21},
+    {Intrinsic::ctpop, MVT::nxv8i64, 21},
+    {Intrinsic::sadd_sat, MVT::v2i8, 1},
+    {Intrinsic::sadd_sat, MVT::v4i8, 1},
+    {Intrinsic::sadd_sat, MVT::v8i8, 1},
+    {Intrinsic::sadd_sat, MVT::v16i8, 1},
+    {Intrinsic::sadd_sat, MVT::nxv2i8, 1},
+    {Intrinsic::sadd_sat, MVT::nxv4i8, 1},
+    {Intrinsic::sadd_sat, MVT::nxv8i8, 1},
+    {Intrinsic::sadd_sat, MVT::nxv16i8, 1},
+    {Intrinsic::sadd_sat, MVT::v2i16, 1},
+    {Intrinsic::sadd_sat, MVT::v4i16, 1},
+    {Intrinsic::sadd_sat, MVT::v8i16, 1},
+    {Intrinsic::sadd_sat, MVT::v16i16, 1},
+    {Intrinsic::sadd_sat, MVT::nxv2i16, 1},
+    {Intrinsic::sadd_sat, MVT::nxv4i16, 1},
+    {Intrinsic::sadd_sat, MVT::nxv8i16, 1},
+    {Intrinsic::sadd_sat, MVT::nxv16i16, 1},
+    {Intrinsic::sadd_sat, MVT::v2i32, 1},
+    {Intrinsic::sadd_sat, MVT::v4i32, 1},
+    {Intrinsic::sadd_sat, MVT::v8i32, 1},
+    {Intrinsic::sadd_sat, MVT::v16i32, 1},
+    {Intrinsic::sadd_sat, MVT::nxv2i32, 1},
+    {Intrinsic::sadd_sat, MVT::nxv4i32, 1},
+    {Intrinsic::sadd_sat, MVT::nxv8i32, 1},
+    {Intrinsic::sadd_sat, MVT::nxv16i32, 1},
+    {Intrinsic::sadd_sat, MVT::v2i64, 1},
+    {Intrinsic::sadd_sat, MVT::v4i64, 1},
+    {Intrinsic::sadd_sat, MVT::v8i64, 1},
+    {Intrinsic::sadd_sat, MVT::v16i64, 1},
+    {Intrinsic::sadd_sat, MVT::nxv2i64, 1},
+    {Intrinsic::sadd_sat, MVT::nxv4i64, 1},
+    {Intrinsic::sadd_sat, MVT::nxv8i64, 1},
+    {Intrinsic::uadd_sat, MVT::v2i8, 1},
+    {Intrinsic::uadd_sat, MVT::v4i8, 1},
+    {Intrinsic::uadd_sat, MVT::v8i8, 1},
+    {Intrinsic::uadd_sat, MVT::v16i8, 1},
+    {Intrinsic::uadd_sat, MVT::nxv2i8, 1},
+    {Intrinsic::uadd_sat, MVT::nxv4i8, 1},
+    {Intrinsic::uadd_sat, MVT::nxv8i8, 1},
+    {Intrinsic::uadd_sat, MVT::nxv16i8, 1},
+    {Intrinsic::uadd_sat, MVT::v2i16, 1},
+    {Intrinsic::uadd_sat, MVT::v4i16, 1},
+    {Intrinsic::uadd_sat, MVT::v8i16, 1},
+    {Intrinsic::uadd_sat, MVT::v16i16, 1},
+    {Intrinsic::uadd_sat, MVT::nxv2i16, 1},
+    {Intrinsic::uadd_sat, MVT::nxv4i16, 1},
+    {Intrinsic::uadd_sat, MVT::nxv8i16, 1},
+    {Intrinsic::uadd_sat, MVT::nxv16i16, 1},
+    {Intrinsic::uadd_sat, MVT::v2i32, 1},
+    {Intrinsic::uadd_sat, MVT::v4i32, 1},
+    {Intrinsic::uadd_sat, MVT::v8i32, 1},
+    {Intrinsic::uadd_sat, MVT::v16i32, 1},
+    {Intrinsic::uadd_sat, MVT::nxv2i32, 1},
+    {Intrinsic::uadd_sat, MVT::nxv4i32, 1},
+    {Intrinsic::uadd_sat, MVT::nxv8i32, 1},
+    {Intrinsic::uadd_sat, MVT::nxv16i32, 1},
+    {Intrinsic::uadd_sat, MVT::v2i64, 1},
+    {Intrinsic::uadd_sat, MVT::v4i64, 1},
+    {Intrinsic::uadd_sat, MVT::v8i64, 1},
+    {Intrinsic::uadd_sat, MVT::v16i64, 1},
+    {Intrinsic::uadd_sat, MVT::nxv2i64, 1},
+    {Intrinsic::uadd_sat, MVT::nxv4i64, 1},
+    {Intrinsic::uadd_sat, MVT::nxv8i64, 1},
+    {Intrinsic::usub_sat, MVT::v2i8, 1},
+    {Intrinsic::usub_sat, MVT::v4i8, 1},
+    {Intrinsic::usub_sat, MVT::v8i8, 1},
+    {Intrinsic::usub_sat, MVT::v16i8, 1},
+    {Intrinsic::usub_sat, MVT::nxv2i8, 1},
+    {Intrinsic::usub_sat, MVT::nxv4i8, 1},
+    {Intrinsic::usub_sat, MVT::nxv8i8, 1},
+    {Intrinsic::usub_sat, MVT::nxv16i8, 1},
+    {Intrinsic::usub_sat, MVT::v2i16, 1},
+    {Intrinsic::usub_sat, MVT::v4i16, 1},
+    {Intrinsic::usub_sat, MVT::v8i16, 1},
+    {Intrinsic::usub_sat, MVT::v16i16, 1},
+    {Intrinsic::usub_sat, MVT::nxv2i16, 1},
+    {Intrinsic::usub_sat, MVT::nxv4i16, 1},
+    {Intrinsic::usub_sat, MVT::nxv8i16, 1},
+    {Intrinsic::usub_sat, MVT::nxv16i16, 1},
+    {Intrinsic::usub_sat, MVT::v2i32, 1},
+    {Intrinsic::usub_sat, MVT::v4i32, 1},
+    {Intrinsic::usub_sat, MVT::v8i32, 1},
+    {Intrinsic::usub_sat, MVT::v16i32, 1},
+    {Intrinsic::usub_sat, MVT::nxv2i32, 1},
+    {Intrinsic::usub_sat, MVT::nxv4i32, 1},
+    {Intrinsic::usub_sat, MVT::nxv8i32, 1},
+    {Intrinsic::usub_sat, MVT::nxv16i32, 1},
+    {Intrinsic::usub_sat, MVT::v2i64, 1},
+    {Intrinsic::usub_sat, MVT::v4i64, 1},
+    {Intrinsic::usub_sat, MVT::v8i64, 1},
+    {Intrinsic::usub_sat, MVT::v16i64, 1},
+    {Intrinsic::usub_sat, MVT::nxv2i64, 1},
+    {Intrinsic::usub_sat, MVT::nxv4i64, 1},
+    {Intrinsic::usub_sat, MVT::nxv8i64, 1},
+    {Intrinsic::ssub_sat, MVT::v2i8, 1},
+    {Intrinsic::ssub_sat, MVT::v4i8, 1},
+    {Intrinsic::ssub_sat, MVT::v8i8, 1},
+    {Intrinsic::ssub_sat, MVT::v16i8, 1},
+    {Intrinsic::ssub_sat, MVT::nxv2i8, 1},
+    {Intrinsic::ssub_sat, MVT::nxv4i8, 1},
+    {Intrinsic::ssub_sat, MVT::nxv8i8, 1},
+    {Intrinsic::ssub_sat, MVT::nxv16i8, 1},
+    {Intrinsic::ssub_sat, MVT::v2i16, 1},
+    {Intrinsic::ssub_sat, MVT::v4i16, 1},
+    {Intrinsic::ssub_sat, MVT::v8i16, 1},
+    {Intrinsic::ssub_sat, MVT::v16i16, 1},
+    {Intrinsic::ssub_sat, MVT::nxv2i16, 1},
+    {Intrinsic::ssub_sat, MVT::nxv4i16, 1},
+    {Intrinsic::ssub_sat, MVT::nxv8i16, 1},
+    {Intrinsic::ssub_sat, MVT::nxv16i16, 1},
+    {Intrinsic::ssub_sat, MVT::v2i32, 1},
+    {Intrinsic::ssub_sat, MVT::v4i32, 1},
+    {Intrinsic::ssub_sat, MVT::v8i32, 1},
+    {Intrinsic::ssub_sat, MVT::v16i32, 1},
+    {Intrinsic::ssub_sat, MVT::nxv2i32, 1},
+    {Intrinsic::ssub_sat, MVT::nxv4i32, 1},
+    {Intrinsic::ssub_sat, MVT::nxv8i32, 1},
+    {Intrinsic::ssub_sat, MVT::nxv16i32, 1},
+    {Intrinsic::ssub_sat, MVT::v2i64, 1},
+    {Intrinsic::ssub_sat, MVT::v4i64, 1},
+    {Intrinsic::ssub_sat, MVT::v8i64, 1},
+    {Intrinsic::ssub_sat, MVT::v16i64, 1},
+    {Intrinsic::ssub_sat, MVT::nxv2i64, 1},
+    {Intrinsic::ssub_sat, MVT::nxv4i64, 1},
+    {Intrinsic::ssub_sat, MVT::nxv8i64, 1},
 };
 
 InstructionCost
@@ -700,6 +576,16 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
                                     TTI::TargetCostKind CostKind) {
   auto *RetTy = ICA.getReturnType();
   switch (ICA.getID()) {
+  case Intrinsic::umin:
+  case Intrinsic::umax:
+  case Intrinsic::smin:
+  case Intrinsic::smax: {
+    auto LT = getTypeLegalizationCost(RetTy);
+    if ((ST->hasVInstructions() && LT.second.isVector()) ||
+        (LT.second.isScalarInteger() && ST->hasStdExtZbb()))
+      return LT.first;
+    break;
+  }
   // TODO: add more intrinsic
   case Intrinsic::experimental_stepvector: {
     unsigned Cost = 1; // vid