From 2c0098e8cb26423c74aaa514f0f6a3b8d395ad1e Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 14 Feb 2024 21:22:21 -0500 Subject: [PATCH] Cleanups for tagged code instance (#53336) Two small cleanups to #52233 - Don't use foreign code-instances for native code caching decision making - don't return a non-native codeinst for jl_method_compiled --------- Co-authored-by: Keno Fischer --- src/gf.c | 5 +++-- src/precompile_utils.c | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gf.c b/src/gf.c index 00613cf9da486..20179157ff836 100644 --- a/src/gf.c +++ b/src/gf.c @@ -2368,12 +2368,13 @@ jl_method_instance_t *jl_get_unspecialized(jl_method_t *def JL_PROPAGATES_ROOT) jl_code_instance_t *jl_method_compiled(jl_method_instance_t *mi, size_t world) { jl_code_instance_t *codeinst = jl_atomic_load_relaxed(&mi->cache); - while (codeinst) { + for (; codeinst; codeinst = jl_atomic_load_relaxed(&codeinst->next)) { + if (codeinst->owner != jl_nothing) + continue; if (jl_atomic_load_relaxed(&codeinst->min_world) <= world && world <= jl_atomic_load_relaxed(&codeinst->max_world)) { if (jl_atomic_load_relaxed(&codeinst->invoke) != NULL) return codeinst; } - codeinst = jl_atomic_load_relaxed(&codeinst->next); } return NULL; } diff --git a/src/precompile_utils.c b/src/precompile_utils.c index 338c62b7e2d72..35dc0e2f59493 100644 --- a/src/precompile_utils.c +++ b/src/precompile_utils.c @@ -182,7 +182,10 @@ static int precompile_enq_specialization_(jl_method_instance_t *mi, void *closur jl_code_instance_t *codeinst = jl_atomic_load_relaxed(&mi->cache); while (codeinst) { int do_compile = 0; - if (jl_atomic_load_relaxed(&codeinst->invoke) != jl_fptr_const_return) { + if (codeinst->owner != jl_nothing) { + // TODO(vchuravy) native code caching for foreign interpreters + } + else if (jl_atomic_load_relaxed(&codeinst->invoke) != jl_fptr_const_return) { jl_value_t *inferred = jl_atomic_load_relaxed(&codeinst->inferred); if (inferred && inferred != jl_nothing &&