Why aren't expressions such as `isinteger` simplified in case that the result is inferrable from the arguments?

Ah well,

julia> isinteger(typemax(Int) + 0.5)
true

Although,

julia> isinteger(typemax(Int32) + 0.5)
false

julia> isinteger(typemin(Int32) + 0.5)
false

but this is still not inferred

julia> @code_typed (n -> isinteger(n+0.5))(Int32(1))
CodeInfo(
1 ─ %1 = Base.sitofp(Float64, n)::Float64
│   %2 = Base.add_float(%1, 0.5)::Float64
│   %3 = Base.trunc_llvm(%2)::Float64
│   %4 = Base.sub_float(%2, %3)::Float64
│   %5 = Base.eq_float(%4, 0.0)::Bool
│   %6 = Base.and_int(%5, true)::Bool
│   %7 = Base.and_int(%6, true)::Bool
└──      return %7
) => Bool
3 Likes