Skip to content

Commit 52f4831

Browse files
BrzVladmatouskozak
authored andcommitted
[mono][interp] Minor fixes (dotnet#100661)
* [mono][interp] Remove no longer used hashtable * [mono][interp] Fix leak in tiering We were looking with wrong key by mistake. * [mono][interp] Ensure new var value has initialized liveness information
1 parent 60ee773 commit 52f4831

5 files changed

Lines changed: 4 additions & 42 deletions

File tree

src/mono/mono/mini/interp/interp.c

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,6 @@ static gboolean debugger_enabled = FALSE;
266266

267267
static MonoException* do_transform_method (InterpMethod *imethod, InterpFrame *method, ThreadContext *context);
268268

269-
static InterpMethod* lookup_method_pointer (gpointer addr);
270-
271269
typedef void (*ICallMethod) (InterpFrame *frame);
272270

273271
static MonoNativeTlsKey thread_context_id;
@@ -3262,20 +3260,6 @@ interp_compile_interp_method (MonoMethod *method, MonoError *error)
32623260
return imethod->jinfo;
32633261
}
32643262

3265-
static InterpMethod*
3266-
lookup_method_pointer (gpointer addr)
3267-
{
3268-
InterpMethod *res = NULL;
3269-
MonoJitMemoryManager *jit_mm = get_default_jit_mm ();
3270-
3271-
jit_mm_lock (jit_mm);
3272-
if (jit_mm->interp_method_pointer_hash)
3273-
res = (InterpMethod*)g_hash_table_lookup (jit_mm->interp_method_pointer_hash, addr);
3274-
jit_mm_unlock (jit_mm);
3275-
3276-
return res;
3277-
}
3278-
32793263
#ifndef MONO_ARCH_HAVE_INTERP_NATIVE_TO_MANAGED
32803264
static void
32813265
interp_no_native_to_managed (void)
@@ -3380,13 +3364,6 @@ interp_create_method_pointer_llvmonly (MonoMethod *method, gboolean unbox, MonoE
33803364

33813365
addr = mini_llvmonly_create_ftndesc (method, entry_wrapper, entry_ftndesc);
33823366

3383-
MonoJitMemoryManager *jit_mm = jit_mm_for_method (method);
3384-
jit_mm_lock (jit_mm);
3385-
if (!jit_mm->interp_method_pointer_hash)
3386-
jit_mm->interp_method_pointer_hash = g_hash_table_new (NULL, NULL);
3387-
g_hash_table_insert (jit_mm->interp_method_pointer_hash, addr, imethod);
3388-
jit_mm_unlock (jit_mm);
3389-
33903367
mono_memory_barrier ();
33913368
if (unbox)
33923369
imethod->llvmonly_unbox_entry = addr;
@@ -3538,13 +3515,6 @@ interp_create_method_pointer (MonoMethod *method, gboolean compile, MonoError *e
35383515

35393516
addr = mono_create_ftnptr_arg_trampoline (ftndesc, entry_wrapper);
35403517

3541-
MonoJitMemoryManager *jit_mm = get_default_jit_mm ();
3542-
jit_mm_lock (jit_mm);
3543-
if (!jit_mm->interp_method_pointer_hash)
3544-
jit_mm->interp_method_pointer_hash = g_hash_table_new (NULL, NULL);
3545-
g_hash_table_insert (jit_mm->interp_method_pointer_hash, addr, imethod);
3546-
jit_mm_unlock (jit_mm);
3547-
35483518
mono_memory_barrier ();
35493519
imethod->jit_entry = addr;
35503520

@@ -3555,23 +3525,16 @@ static void
35553525
interp_free_method (MonoMethod *method)
35563526
{
35573527
MonoJitMemoryManager *jit_mm = jit_mm_for_method (method);
3558-
InterpMethod *imethod;
35593528
MonoDynamicMethod *dmethod = (MonoDynamicMethod*)method;
35603529

35613530
jit_mm_lock (jit_mm);
3562-
imethod = (InterpMethod*)mono_internal_hash_table_lookup (&jit_mm->interp_code_hash, method);
35633531

35643532
#if HOST_BROWSER
3533+
InterpMethod *imethod = (InterpMethod*)mono_internal_hash_table_lookup (&jit_mm->interp_code_hash, method);
35653534
mono_jiterp_free_method_data (method, imethod);
35663535
#endif
35673536

35683537
mono_internal_hash_table_remove (&jit_mm->interp_code_hash, method);
3569-
if (imethod && jit_mm->interp_method_pointer_hash) {
3570-
if (imethod->jit_entry)
3571-
g_hash_table_remove (jit_mm->interp_method_pointer_hash, imethod->jit_entry);
3572-
if (imethod->llvmonly_unbox_entry)
3573-
g_hash_table_remove (jit_mm->interp_method_pointer_hash, imethod->llvmonly_unbox_entry);
3574-
}
35753538
jit_mm_unlock (jit_mm);
35763539

35773540
if (dmethod->mp) {

src/mono/mono/mini/interp/tiering.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ patch_interp_data_items (InterpMethod *old_imethod, InterpMethod *new_imethod)
6464
GSList *sites = g_hash_table_lookup (patch_sites_table, old_imethod);
6565
g_slist_foreach (sites, patch_imethod_site, new_imethod);
6666

67-
g_hash_table_remove (patch_sites_table, sites);
67+
g_hash_table_remove (patch_sites_table, old_imethod);
6868
g_slist_free (sites);
6969
}
7070

src/mono/mono/mini/interp/transform-opt.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,6 +2241,7 @@ interp_fold_unop (TransformData *td, InterpInst *ins)
22412241
td->var_values [sreg].ref_count--;
22422242
result.def = ins;
22432243
result.ref_count = td->var_values [dreg].ref_count; // preserve ref count
2244+
result.liveness = td->var_values [dreg].liveness;
22442245
td->var_values [dreg] = result;
22452246

22462247
return ins;
@@ -2478,6 +2479,7 @@ interp_fold_binop (TransformData *td, InterpInst *ins, gboolean *folded)
24782479
td->var_values [sreg2].ref_count--;
24792480
result.def = ins;
24802481
result.ref_count = td->var_values [dreg].ref_count; // preserve ref count
2482+
result.liveness = td->var_values [dreg].liveness;
24812483
td->var_values [dreg] = result;
24822484

24832485
return ins;

src/mono/mono/mini/mini-runtime.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4452,7 +4452,6 @@ free_jit_mem_manager (MonoMemoryManager *mem_manager)
44524452
g_hash_table_destroy (info->dyn_delegate_info_hash);
44534453
g_hash_table_destroy (info->static_rgctx_trampoline_hash);
44544454
g_hash_table_destroy (info->mrgctx_hash);
4455-
g_hash_table_destroy (info->interp_method_pointer_hash);
44564455
mono_conc_hashtable_destroy (info->runtime_invoke_hash);
44574456
g_hash_table_destroy (info->seq_points);
44584457
g_hash_table_destroy (info->arch_seq_points);

src/mono/mono/mini/mini-runtime.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ typedef struct {
5454
MonoInternalHashTable interp_code_hash;
5555
/* Maps MonoMethod -> MonoMethodRuntimeGenericContext */
5656
GHashTable *mrgctx_hash;
57-
/* Maps gpointer -> InterpMethod */
58-
GHashTable *interp_method_pointer_hash;
5957
/* Protected by 'jit_code_hash_lock' */
6058
MonoInternalHashTable jit_code_hash;
6159
mono_mutex_t jit_code_hash_lock;

0 commit comments

Comments
 (0)