Skip to content

Commit fa0f780

Browse files
topolaritykpamnany
authored andcommitted
gf.c: include const-return methods in --trace-compile
These are never compiled by LLVM, but we want to log them since they are inferred / compiled by our own compiler.
1 parent 010d301 commit fa0f780

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/gf.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,8 @@ JL_DLLEXPORT jl_code_instance_t *jl_get_method_inferred(
476476
return codeinst;
477477
}
478478

479+
static void record_precompile_statement(jl_method_instance_t *mi, double compilation_time, int is_const_return_abi);
480+
479481
JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst(
480482
jl_method_instance_t *mi, jl_value_t *rettype,
481483
jl_value_t *inferred_const, jl_value_t *inferred,
@@ -501,6 +503,10 @@ JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst(
501503
jl_atomic_store_relaxed(&codeinst->invoke, NULL);
502504
if ((const_flags & 1) != 0) {
503505
assert(const_flags & 2);
506+
if (jl_is_method(mi->def.value) && jl_isa_compileable_sig((jl_tupletype_t *)mi->specTypes, mi->sparam_vals, mi->def.method)) {
507+
// This code was freshly-inferred, so let's emit a `precompile(...)` statement for it
508+
record_precompile_statement(mi, 0.0, 1);
509+
}
504510
jl_atomic_store_relaxed(&codeinst->invoke, jl_fptr_const_return);
505511
}
506512
jl_atomic_store_relaxed(&codeinst->specsigflags, 0);
@@ -2392,7 +2398,7 @@ JL_DLLEXPORT void jl_force_trace_compile_timing_disable(void)
23922398
jl_atomic_fetch_add(&jl_force_trace_compile_timing_enabled, -1);
23932399
}
23942400

2395-
static void record_precompile_statement(jl_method_instance_t *mi, double compilation_time)
2401+
static void record_precompile_statement(jl_method_instance_t *mi, double compilation_time, int is_const_return_abi)
23962402
{
23972403
static ios_t f_precompile;
23982404
static JL_STREAM* s_precompile = NULL;
@@ -2420,7 +2426,10 @@ static void record_precompile_statement(jl_method_instance_t *mi, double compila
24202426
jl_printf(s_precompile, "#= %6.1f =# ", compilation_time / 1e6);
24212427
jl_printf(s_precompile, "precompile(");
24222428
jl_static_show(s_precompile, mi->specTypes);
2423-
jl_printf(s_precompile, ")\n");
2429+
if (is_const_return_abi)
2430+
jl_printf(s_precompile, ") #= const-return =#\n");
2431+
else
2432+
jl_printf(s_precompile, ")\n");
24242433
if (s_precompile != JL_STDERR)
24252434
ios_flush(&f_precompile);
24262435
}
@@ -2566,7 +2575,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25662575
codeinst->rettype_const = unspec->rettype_const;
25672576
jl_atomic_store_release(&codeinst->invoke, unspec_invoke);
25682577
jl_mi_cache_insert(mi, codeinst);
2569-
record_precompile_statement(mi, 0);
2578+
record_precompile_statement(mi, 0.0, 0);
25702579
return codeinst;
25712580
}
25722581
}
@@ -2583,7 +2592,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25832592
0, 1, ~(size_t)0, 0, 0, jl_nothing, 0);
25842593
jl_atomic_store_release(&codeinst->invoke, jl_fptr_interpret_call);
25852594
jl_mi_cache_insert(mi, codeinst);
2586-
record_precompile_statement(mi, 0);
2595+
record_precompile_statement(mi, 0.0, 0);
25872596
return codeinst;
25882597
}
25892598
if (compile_option == JL_OPTIONS_COMPILE_OFF) {
@@ -2638,7 +2647,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
26382647
jl_mi_cache_insert(mi, codeinst);
26392648
}
26402649
else if (did_compile) {
2641-
record_precompile_statement(mi, compile_time);
2650+
record_precompile_statement(mi, compile_time, 0);
26422651
}
26432652
jl_atomic_store_relaxed(&codeinst->precompile, 1);
26442653
return codeinst;

0 commit comments

Comments
 (0)