@@ -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+
479481JL_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