# file : src/lang/expr_operator.ccExpr max_value(const DataType& dtype) { using namespace ir; CHECK_EQ(dtype.lanes(), 1); if (dtype.is_int()) { if (dtype.bits() == 64) { return IntImm::make(dtype, std::numeric_limits<int64_t>::max()); } else if (dtype.bits() < 64) { int64_t val = 1; val = (val << (dtype.bits() - 1)) - 1; return IntImm::make(dtype, val); } } else if (dtype.is_uint()) { if (dtype.bits() == 64) { return UIntImm::make(dtype, std::numeric_limits<uint64_t>::max()); } else if (dtype.bits() < 64) { uint64_t val = 1; val = (val << static_cast<uint64_t>(dtype.bits())) - 1; return UIntImm::make(dtype, val); } } else if (dtype.is_float()) { if (dtype.bits() == 64) { return FloatImm::make(dtype, std::numeric_limits<double>::max()); } else if (dtype.bits() == 32) { return FloatImm::make(dtype, std::numeric_limits<float>::max()); } else if (dtype.bits() == 16) { return FloatImm::make(dtype, 65504.0); } } LOG(FATAL) << "Cannot decide max_value for type" << dtype; return Expr();}Expr min_value(const DataType& dtype) { using namespace ir; CHECK_EQ(dtype.lanes(), 1); if (dtype.is_int()) { if (dtype.bits() == 64) { return IntImm::make(dtype, std::numeric_limits<int64_t>::lowest()); } else if (dtype.bits() < 64) { int64_t val = 1; val = -(val << (dtype.bits() - 1)); return IntImm::make(dtype, val); } } else if (dtype.is_uint()) { return UIntImm::make(dtype, 0); } else if (dtype.is_float()) { if (dtype.bits() == 64) { return FloatImm::make(dtype, std::numeric_limits<double>::lowest()); } else if (dtype.bits() == 32) { return FloatImm::make(dtype, std::numeric_limits<float>::lowest()); } else if (dtype.bits() == 16) { return FloatImm::make(dtype, -65504.0); } } LOG(FATAL) << "Cannot decide min_value for type" << dtype; return Expr();}