Skip to content

Commit 11292a9

Browse files
kpamnanytopolarity
andauthored
gf.c: include const-return methods in --trace-compile (#237)
* 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. * Drop comment for const-return compilation traces --------- Co-authored-by: Cody Tapscott <[email protected]>
1 parent 090331a commit 11292a9

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/gf.c

Lines changed: 10 additions & 4 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;
@@ -2566,7 +2572,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25662572
codeinst->rettype_const = unspec->rettype_const;
25672573
jl_atomic_store_release(&codeinst->invoke, unspec_invoke);
25682574
jl_mi_cache_insert(mi, codeinst);
2569-
record_precompile_statement(mi, 0);
2575+
record_precompile_statement(mi, 0.0, 0);
25702576
return codeinst;
25712577
}
25722578
}
@@ -2583,7 +2589,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
25832589
0, 1, ~(size_t)0, 0, 0, jl_nothing, 0);
25842590
jl_atomic_store_release(&codeinst->invoke, jl_fptr_interpret_call);
25852591
jl_mi_cache_insert(mi, codeinst);
2586-
record_precompile_statement(mi, 0);
2592+
record_precompile_statement(mi, 0.0, 0);
25872593
return codeinst;
25882594
}
25892595
if (compile_option == JL_OPTIONS_COMPILE_OFF) {
@@ -2638,7 +2644,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
26382644
jl_mi_cache_insert(mi, codeinst);
26392645
}
26402646
else if (did_compile) {
2641-
record_precompile_statement(mi, compile_time);
2647+
record_precompile_statement(mi, compile_time, 0);
26422648
}
26432649
jl_atomic_store_relaxed(&codeinst->precompile, 1);
26442650
return codeinst;

0 commit comments

Comments
 (0)