@@ -476,6 +476,8 @@ JL_DLLEXPORT jl_code_instance_t *jl_get_method_inferred(
476
476
return codeinst ;
477
477
}
478
478
479
+ static void record_precompile_statement (jl_method_instance_t * mi , double compilation_time , int is_const_return_abi );
480
+
479
481
JL_DLLEXPORT jl_code_instance_t * jl_new_codeinst (
480
482
jl_method_instance_t * mi , jl_value_t * rettype ,
481
483
jl_value_t * inferred_const , jl_value_t * inferred ,
@@ -501,6 +503,10 @@ JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst(
501
503
jl_atomic_store_relaxed (& codeinst -> invoke , NULL );
502
504
if ((const_flags & 1 ) != 0 ) {
503
505
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
+ }
504
510
jl_atomic_store_relaxed (& codeinst -> invoke , jl_fptr_const_return );
505
511
}
506
512
jl_atomic_store_relaxed (& codeinst -> specsigflags , 0 );
@@ -2392,7 +2398,7 @@ JL_DLLEXPORT void jl_force_trace_compile_timing_disable(void)
2392
2398
jl_atomic_fetch_add (& jl_force_trace_compile_timing_enabled , -1 );
2393
2399
}
2394
2400
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 )
2396
2402
{
2397
2403
static ios_t f_precompile ;
2398
2404
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
2566
2572
codeinst -> rettype_const = unspec -> rettype_const ;
2567
2573
jl_atomic_store_release (& codeinst -> invoke , unspec_invoke );
2568
2574
jl_mi_cache_insert (mi , codeinst );
2569
- record_precompile_statement (mi , 0 );
2575
+ record_precompile_statement (mi , 0.0 , 0 );
2570
2576
return codeinst ;
2571
2577
}
2572
2578
}
@@ -2583,7 +2589,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t
2583
2589
0 , 1 , ~(size_t )0 , 0 , 0 , jl_nothing , 0 );
2584
2590
jl_atomic_store_release (& codeinst -> invoke , jl_fptr_interpret_call );
2585
2591
jl_mi_cache_insert (mi , codeinst );
2586
- record_precompile_statement (mi , 0 );
2592
+ record_precompile_statement (mi , 0.0 , 0 );
2587
2593
return codeinst ;
2588
2594
}
2589
2595
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
2638
2644
jl_mi_cache_insert (mi , codeinst );
2639
2645
}
2640
2646
else if (did_compile ) {
2641
- record_precompile_statement (mi , compile_time );
2647
+ record_precompile_statement (mi , compile_time , 0 );
2642
2648
}
2643
2649
jl_atomic_store_relaxed (& codeinst -> precompile , 1 );
2644
2650
return codeinst ;
0 commit comments