Skip to content

Commit 3b618cb

Browse files
IanButterworthstevengj
authored andcommitted
Don't report only-inferred methods as recompiles (#56914)
1 parent 37ca695 commit 3b618cb

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/gf.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2863,7 +2863,17 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
28632863

28642864
// Everything from here on is considered (user facing) compile time
28652865
uint64_t start = jl_typeinf_timing_begin();
2866-
int is_recompile = jl_atomic_load_relaxed(&mi->cache) != NULL;
2866+
2867+
// Is a recompile if there is cached code, and it was compiled (not only inferred) before
2868+
int is_recompile = 0;
2869+
jl_code_instance_t *codeinst_old = jl_atomic_load_relaxed(&mi->cache);
2870+
while (codeinst_old != NULL) {
2871+
if (jl_atomic_load_relaxed(&codeinst_old->invoke) != NULL) {
2872+
is_recompile = 1;
2873+
break;
2874+
}
2875+
codeinst_old = jl_atomic_load_relaxed(&codeinst_old->next);
2876+
}
28672877

28682878
// This codeinst hasn't been previously inferred do that now
28692879
// jl_type_infer will internally do a cache lookup and jl_engine_reserve call

test/cmdlineargs.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,26 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no`
818818
@test occursin(" ms =# precompile(Tuple{typeof(Main.foo), Int", _stderr)
819819
end
820820

821+
# Base.@trace_compile (local version of the 2 above args)
822+
let
823+
io = IOBuffer()
824+
v = writereadpipeline(
825+
"""
826+
f(x::Int) = 1
827+
applyf(container) = f(container[1])
828+
Base.@trace_compile @eval applyf([100])
829+
Base.@trace_compile @eval applyf(Any[100])
830+
f(::Bool) = 2
831+
Base.@trace_compile @eval applyf([true])
832+
Base.@trace_compile @eval applyf(Any[true])
833+
""",
834+
`$exename -i`,
835+
stderr=io)
836+
_stderr = String(take!(io))
837+
@test length(findall(r"precompile\(", _stderr)) == 5
838+
@test length(findall(r" # recompile", _stderr)) == 1
839+
end
840+
821841
# --trace-dispatch
822842
let
823843
io = IOBuffer()

0 commit comments

Comments
 (0)