Currently `Expression::getIntRange()` returns `IntRange::fromType(type)`, but now `getIntRange(e)` with `visit(Expression *e)` will return `IntRange::fromType(e->type).cast(e->type)`. I'm really not sure that the difference would cause problems, but I don't want to change *any* behaviors by refactoring PR.