@@ -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 ;
@@ -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