Skip to content

Commit a579dab

Browse files
kpamnanyKristofferC
authored andcommitted
Remove some duplicates from emitted compilation traces for Julia 1.10 (#53776)
When multiple threads concurrently attempt to compile the same method, `--trace-compile` could emit duplicate `precompile` statements. This small tweak eliminates one source of these duplicates. Backported to 1.10 from #53774. (cherry picked from commit f6a3c5f)
1 parent 005ac6d commit a579dab

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

src/codegen-stubs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ JL_DLLEXPORT void jl_register_fptrs_fallback(uint64_t image_base, const struct _
3838
(void)image_base; (void)fptrs; (void)linfos; (void)n;
3939
}
4040

41-
JL_DLLEXPORT jl_code_instance_t *jl_generate_fptr_fallback(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world)
41+
JL_DLLEXPORT jl_code_instance_t *jl_generate_fptr_fallback(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile)
4242
{
4343
return NULL;
4444
}

src/gf.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2530,7 +2530,8 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25302530
}
25312531
}
25322532

2533-
codeinst = jl_generate_fptr(mi, world);
2533+
int did_compile = 0;
2534+
codeinst = jl_generate_fptr(mi, world, &did_compile);
25342535
if (!codeinst) {
25352536
jl_method_instance_t *unspec = jl_get_unspecialized_from_mi(mi);
25362537
jl_code_instance_t *ucache = jl_get_method_inferred(unspec, (jl_value_t*)jl_any_type, 1, ~(size_t)0);
@@ -2568,7 +2569,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25682569
jl_atomic_store_release(&codeinst->invoke, ucache_invoke);
25692570
jl_mi_cache_insert(mi, codeinst);
25702571
}
2571-
else {
2572+
else if (did_compile) {
25722573
record_precompile_statement(mi);
25732574
}
25742575
jl_atomic_store_relaxed(&codeinst->precompile, 1);

src/jitlayers.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,8 +470,10 @@ void jl_extern_c_impl(jl_value_t *declrt, jl_tupletype_t *sigt)
470470

471471
// this compiles li and emits fptr
472472
extern "C" JL_DLLEXPORT_CODEGEN
473-
jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world)
473+
jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile)
474474
{
475+
if (did_compile != NULL)
476+
*did_compile = 0;
475477
auto ct = jl_current_task;
476478
bool timed = (ct->reentrant_timing & 1) == 0;
477479
if (timed)
@@ -526,6 +528,8 @@ jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES
526528
_jl_compile_codeinst(codeinst, src, world, *jl_ExecutionEngine->getContext(), is_recompile);
527529
if (jl_atomic_load_relaxed(&codeinst->invoke) == NULL)
528530
codeinst = NULL;
531+
else if (did_compile != NULL)
532+
*did_compile = 1;
529533
}
530534
else {
531535
codeinst = NULL;
@@ -613,7 +617,7 @@ jl_value_t *jl_dump_method_asm_impl(jl_method_instance_t *mi, size_t world,
613617
char emit_mc, char getwrapper, const char* asm_variant, const char *debuginfo, char binary)
614618
{
615619
// printing via disassembly
616-
jl_code_instance_t *codeinst = jl_generate_fptr(mi, world);
620+
jl_code_instance_t *codeinst = jl_generate_fptr(mi, world, NULL);
617621
if (codeinst) {
618622
uintptr_t fptr = (uintptr_t)jl_atomic_load_acquire(&codeinst->invoke);
619623
if (getwrapper)

src/julia_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1724,7 +1724,7 @@ JL_DLLEXPORT uint32_t jl_crc32c(uint32_t crc, const char *buf, size_t len);
17241724

17251725
#define IR_FLAG_INBOUNDS 0x01
17261726

1727-
JL_DLLIMPORT jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world);
1727+
JL_DLLIMPORT jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile);
17281728
JL_DLLIMPORT void jl_generate_fptr_for_unspecialized(jl_code_instance_t *unspec);
17291729
JL_DLLIMPORT void jl_generate_fptr_for_oc_wrapper(jl_code_instance_t *unspec);
17301730
JL_DLLIMPORT int jl_compile_extern_c(LLVMOrcThreadSafeModuleRef llvmmod, void *params, void *sysimg, jl_value_t *declrt, jl_value_t *sigt);

0 commit comments

Comments
 (0)