[internals] add time metrics for every CodeInstance (#57074)
Adds 4 new Float16 fields to CodeInstance to replace Compiler.Timings
with continually collected and available measurements.
Sample results on a novel method signature:
julia> @time code_native(devnull, ÷, dump_module=false, (Int32,
UInt16));
0.006262 seconds (3.62 k allocations: 186.641 KiB, 75.53% compilation
time)
julia> b = which(÷, (Int32, UInt16)).specializations[6].cache
CodeInstance for MethodInstance for div(::Int32, ::UInt16)
julia> reinterpret(Float16, b.time_infer_self)
Float16(0.0002766)
julia> reinterpret(Float16, b.time_infer_total)
Float16(0.00049)
julia> reinterpret(Float16, b.time_infer_cache_saved)
Float16(0.02774)
julia> reinterpret(Float16, b.time_compile)
Float16(0.003773)
Closes https://github.com/JuliaLang/julia/issues/56115