Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions src/aotcompile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -675,20 +675,6 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm
fargs[0] = (jl_value_t*)codeinfos;
void *data = jl_emit_native(codeinfos, llvmmod, &cgparams, external_linkage);

// examine everything just emitted and save it to the caches
if (!external_linkage) {
for (size_t i = 0, l = jl_array_nrows(codeinfos); i < l; i++) {
jl_value_t *item = jl_array_ptr_ref(codeinfos, i);
if (jl_is_code_instance(item)) {
// now add it to our compilation results
jl_code_instance_t *codeinst = (jl_code_instance_t*)item;
jl_code_info_t *src = (jl_code_info_t*)jl_array_ptr_ref(codeinfos, ++i);
assert(jl_is_code_info(src));
jl_add_codeinst_to_cache(codeinst, src);
}
}
}

// move everything inside, now that we've merged everything
// (before adding the exported headers)
((jl_native_code_desc_t*)data)->M.withModuleDo([&](Module &M) {
Expand Down
20 changes: 0 additions & 20 deletions src/gf.c
Original file line number Diff line number Diff line change
Expand Up @@ -2837,30 +2837,10 @@ void jl_read_codeinst_invoke(jl_code_instance_t *ci, uint8_t *specsigflags, jl_c

jl_method_instance_t *jl_normalize_to_compilable_mi(jl_method_instance_t *mi JL_PROPAGATES_ROOT);

JL_DLLEXPORT void jl_add_codeinst_to_cache(jl_code_instance_t *codeinst, jl_code_info_t *src)
{
assert(jl_is_code_info(src));
jl_method_instance_t *mi = jl_get_ci_mi(codeinst);
if (jl_generating_output() && jl_is_method(mi->def.method) && jl_atomic_load_relaxed(&codeinst->inferred) == jl_nothing) {
jl_value_t *compressed = jl_compress_ir(mi->def.method, src);
// These should already be compatible (and should be an assert), but make sure of it anyways
if (jl_is_svec(src->edges)) {
jl_atomic_store_release(&codeinst->edges, (jl_svec_t*)src->edges);
jl_gc_wb(codeinst, src->edges);
}
jl_atomic_store_release(&codeinst->debuginfo, src->debuginfo);
jl_gc_wb(codeinst, src->debuginfo);
jl_atomic_store_release(&codeinst->inferred, compressed);
jl_gc_wb(codeinst, compressed);
}
}


JL_DLLEXPORT void jl_add_codeinst_to_jit(jl_code_instance_t *codeinst, jl_code_info_t *src)
{
assert(jl_is_code_info(src));
jl_emit_codeinst_to_jit(codeinst, src);
jl_add_codeinst_to_cache(codeinst, src);
}

jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t world)
Expand Down
1 change: 0 additions & 1 deletion src/julia_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,6 @@ JL_DLLEXPORT jl_method_instance_t *jl_get_unspecialized(jl_method_t *def JL_PROP
JL_DLLEXPORT void jl_read_codeinst_invoke(jl_code_instance_t *ci, uint8_t *specsigflags, jl_callptr_t *invoke, void **specptr, int waitcompile);
JL_DLLEXPORT jl_method_instance_t *jl_method_match_to_mi(jl_method_match_t *match, size_t world, size_t min_valid, size_t max_valid, int mt_cache);
JL_DLLEXPORT void jl_add_codeinst_to_jit(jl_code_instance_t *codeinst, jl_code_info_t *src);
JL_DLLEXPORT void jl_add_codeinst_to_cache(jl_code_instance_t *codeinst, jl_code_info_t *src);

JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst_uninit(jl_method_instance_t *mi, jl_value_t *owner);
JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst(
Expand Down
26 changes: 14 additions & 12 deletions src/staticdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -954,24 +954,26 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_
assert(!jl_object_in_image((jl_value_t*)tn->wrapper));
}
}
if (s->incremental && jl_is_code_instance(v)) {
if (jl_is_code_instance(v)) {
jl_code_instance_t *ci = (jl_code_instance_t*)v;
jl_method_instance_t *mi = jl_get_ci_mi(ci);
// make sure we don't serialize other reachable cache entries of foreign methods
// Should this now be:
// if (ci !in ci->defs->cache)
// record_field_change((jl_value_t**)&ci->next, NULL);
// Why are we checking that the method/module this originates from is in_image?
// and then disconnect this CI?
if (jl_object_in_image((jl_value_t*)mi->def.value)) {
// TODO: if (ci in ci->defs->cache)
record_field_change((jl_value_t**)&ci->next, NULL);
if (s->incremental) {
// make sure we don't serialize other reachable cache entries of foreign methods
// Should this now be:
// if (ci !in ci->defs->cache)
// record_field_change((jl_value_t**)&ci->next, NULL);
// Why are we checking that the method/module this originates from is in_image?
// and then disconnect this CI?
if (jl_object_in_image((jl_value_t*)mi->def.value)) {
// TODO: if (ci in ci->defs->cache)
record_field_change((jl_value_t**)&ci->next, NULL);
}
}
jl_value_t *inferred = jl_atomic_load_relaxed(&ci->inferred);
if (inferred && inferred != jl_nothing) { // disregard if there is nothing here to delete (e.g. builtins, unspecialized)
jl_method_t *def = mi->def.method;
if (jl_is_method(def)) { // don't delete toplevel code
int is_relocatable = jl_is_code_info(inferred) ||
int is_relocatable = !s->incremental || jl_is_code_info(inferred) ||
(jl_is_string(inferred) && jl_string_len(inferred) > 0 && jl_string_data(inferred)[jl_string_len(inferred) - 1]);
if (!is_relocatable) {
inferred = jl_nothing;
Expand All @@ -993,7 +995,7 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_
if (inferred == jl_nothing) {
record_field_change((jl_value_t**)&ci->inferred, jl_nothing);
}
else if (jl_is_string(inferred)) {
else if (s->incremental && jl_is_string(inferred)) {
// New roots for external methods
if (jl_object_in_image((jl_value_t*)def)) {
void **pfound = ptrhash_bp(&s->method_roots_index, def);
Expand Down