Hi all, I found there’s a `is_dynamic_shape`

bool variable in `relay/op/tensor/reduce.cc`

(https://github.com/apache/tvm/blob/main/src/relay/op/tensor/reduce.cc#L276-L301).

```
template <typename AttrsType>
inline std::vector<IndexExpr> ReduceShapeImpl(const std::vector<IndexExpr>& in_shape,
const AttrsType* param,
const TypeReporter& reporter) {
uint32_t indim = in_shape.size();
auto r_axes = GetReduceAxes(indim, param->axis, param->exclude);
if (!r_axes.size()) {
return in_shape;
}
auto max_shape = tir::make_const(DataType::Int(64), 1);
bool is_dynamic_input = false;
for (int64_t axis : r_axes) {
if (in_shape[axis].as<IntImmNode>()) {
max_shape *= in_shape[axis];
} else {
is_dynamic_input = true;
break;
}
}
if (is_dynamic_input) {
ICHECK(reporter->Assert(
max_shape < tir::make_const(DataType::Int(64), std::numeric_limits<int32_t>::max())))
<< "The maximum possible index of reduced shape cannot be more than int32 max.";
}
```

This `is_dynamic_shape`

is used to check the `max_shape < int64_MAX`

, but there’s a problem: a break in `r_axes`

for-loop, which make `max_shape`

less than real reduced shape when meeting dynamic shape?

Thus, I think this `break`

in `r_axes`

for-loop need to remove. Besides, if `break`

in `r_axes`

for-loop removed, I think this assert is not enough safe, either.

```
if (is_dynamic_input) {
ICHECK(reporter->Assert(
max_shape < tir::make_const(DataType::Int(64), std::numeric_limits<int32_t>::max())))
<< "The maximum possible index of reduced shape cannot be more than int32 max.";
}
```