static void _compile_all_deq(jl_array_t *found) { int found_i, found_l = jl_array_len(found); jl_printf(JL_STDERR, "found %d uncompiled methods for compile-all\n", (int)found_l); jl_method_instance_t *mi = NULL; jl_value_t *src = NULL; JL_GC_PUSH2(&mi, &src); for (found_i = 0; found_i < found_l; found_i++) { if (found_i % (1 + found_l / 300) == 0 || found_i == found_l - 1) // show 300 progress steps, to show progress without overwhelming log files jl_printf(JL_STDERR, " %d / %d\r", found_i + 1, found_l); jl_typemap_entry_t *ml = (jl_typemap_entry_t*)jl_array_ptr_ref(found, found_i); jl_method_t *m = ml->func.method; if (m->source == NULL) // TODO: generic implementations of generated functions continue; mi = jl_get_unspecialized(mi); assert(mi == m->unspecialized); // make sure we didn't get tricked by a generated function, since we can't handle those jl_code_instance_t *ucache = jl_get_method_inferred(mi, (jl_value_t*)jl_any_type, 1, ~(size_t)0); if (ucache->invoke != NULL) continue; src = m->source; // TODO: we could now enable storing inferred function pointers in the `unspecialized` cache //src = jl_type_infer(mi, jl_world_counter, 1); //if (ucache->invoke != NULL) // continue; // first try to create leaf signatures from the signature declaration and compile those _compile_all_union((jl_value_t*)ml->sig); // then also compile the generic fallback jl_compile_linfo(mi, (jl_code_info_t*)src, 1, &jl_default_cgparams); assert(ucache->functionObjectsDecls.functionObject != NULL); } JL_GC_POP(); jl_printf(JL_STDERR, "\n"); }
static void _compile_all_deq(jl_array_t *found) { int found_i, found_l = jl_array_len(found); jl_printf(JL_STDERR, "found %d uncompiled methods for compile-all\n", (int)found_l); jl_method_instance_t *linfo = NULL; jl_value_t *src = NULL; JL_GC_PUSH2(&linfo, &src); for (found_i = 0; found_i < found_l; found_i++) { if (found_i % (1 + found_l / 300) == 0 || found_i == found_l - 1) // show 300 progress steps, to show progress without overwhelming log files jl_printf(JL_STDERR, " %d / %d\r", found_i + 1, found_l); jl_typemap_entry_t *ml = (jl_typemap_entry_t*)jl_array_ptr_ref(found, found_i); jl_method_t *m = ml->func.method; if (m->isstaged) // TODO: generic implementations of generated functions continue; linfo = m->unspecialized; if (!linfo) { linfo = jl_get_specialized(m, (jl_value_t*)m->sig, jl_emptysvec); m->unspecialized = linfo; jl_gc_wb(m, linfo); } if (linfo->jlcall_api == 2) continue; src = m->source; // TODO: the `unspecialized` field is not yet world-aware, so we can't store // an inference result there. //src = jl_type_infer(&linfo, jl_world_counter, 1); //m->unspecialized = linfo; //jl_gc_wb(m, linfo); //if (linfo->jlcall_api == 2) // continue; // first try to create leaf signatures from the signature declaration and compile those _compile_all_union((jl_value_t*)ml->sig); // then also compile the generic fallback jl_compile_linfo(&linfo, (jl_code_info_t*)src, jl_world_counter, &jl_default_cgparams); assert(linfo->functionObjectsDecls.functionObject != NULL); } JL_GC_POP(); jl_printf(JL_STDERR, "\n"); }