Taichi implicitly casts RangeFor boundaries to ti.i32, which is an unnecessary limitation and causes confusion when users explicitly specifies ti.i64 as RangeFor boundaries (#5217).

Ideally, backend's dtype limitation should not bother the frontend design. Unfortunately, we did forbiddened higher precision dtypes in certain cases due to concerns regarding the backends (RangeFor boundaries, ti.atan type conversion, etc..)
We should add a "dtype demotion" pass for each specific backend, and remove all these dtype conversions from the frontend.
Taichi implicitly casts RangeFor boundaries to ti.i32, which is an unnecessary limitation and causes confusion when users explicitly specifies ti.i64 as RangeFor boundaries (#5217).
Ideally, backend's dtype limitation should not bother the frontend design. Unfortunately, we did forbiddened higher precision dtypes in certain cases due to concerns regarding the backends (RangeFor boundaries, ti.atan type conversion, etc..)
We should add a "dtype demotion" pass for each specific backend, and remove all these dtype conversions from the frontend.