From ac2df89113d6ead77032aaa21cf2b0253c8975db Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 29 Dec 2020 23:01:10 -0800 Subject: [PATCH] Stop managing valid class serials `mjit_valid_class_serial_p` has no longer been used since b9007b6c548. --- gc.c | 1 - mjit.c | 49 +------------------------------------------------ mjit.h | 4 ---- mjit_worker.c | 13 ------------- vm.c | 1 - 5 files changed, 1 insertion(+), 67 deletions(-) diff --git a/gc.c b/gc.c index 3989a80ba4..f8810d1af6 100644 --- a/gc.c +++ b/gc.c @@ -2820,7 +2820,6 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_MODULE: case T_CLASS: - mjit_remove_class_serial(RCLASS_SERIAL(obj)); rb_id_table_free(RCLASS_M_TBL(obj)); cc_table_free(objspace, obj, FALSE); if (RCLASS_IV_TBL(obj)) { diff --git a/mjit.c b/mjit.c index d87961d7cc..b98f742068 100644 --- a/mjit.c +++ b/mjit.c @@ -521,19 +521,6 @@ init_header_filename(void) return true; } -static enum rb_id_table_iterator_result -valid_class_serials_add_i(ID key, VALUE v, void *unused) -{ - rb_const_entry_t *ce = (rb_const_entry_t *)v; - VALUE value = ce->value; - - if (!rb_is_const_id(key)) return ID_TABLE_CONTINUE; - if (RB_TYPE_P(value, T_MODULE) || RB_TYPE_P(value, T_CLASS)) { - mjit_add_class_serial(RCLASS_SERIAL(value)); - } - return ID_TABLE_CONTINUE; -} - #ifdef _WIN32 UINT rb_w32_system_tmpdir(WCHAR *path, UINT len); #endif @@ -738,16 +725,6 @@ mjit_init(const struct mjit_options *opts) // rb_fiber_init_mjit_cont again with mjit_enabled=true to set the root_fiber's mjit_cont. rb_fiber_init_mjit_cont(GET_EC()->fiber_ptr); - // Initialize class_serials cache for compilation - valid_class_serials = rb_hash_new(); - rb_obj_hide(valid_class_serials); - rb_gc_register_mark_object(valid_class_serials); - mjit_add_class_serial(RCLASS_SERIAL(rb_cObject)); - mjit_add_class_serial(RCLASS_SERIAL(CLASS_OF(rb_vm_top_self()))); - if (RCLASS_CONST_TBL(rb_cObject)) { - rb_id_table_foreach(RCLASS_CONST_TBL(rb_cObject), valid_class_serials_add_i, NULL); - } - // Initialize worker thread start_worker(); } @@ -996,28 +973,4 @@ mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body) } } -// A hook to update valid_class_serials. -void -mjit_add_class_serial(rb_serial_t class_serial) -{ - if (!mjit_enabled) - return; - - // Do not wrap CRITICAL_SECTION here. This function is only called in main thread - // and guarded by GVL, and `rb_hash_aset` may cause GC and deadlock in it. - rb_hash_aset(valid_class_serials, LONG2FIX(class_serial), Qtrue); -} - -// A hook to update valid_class_serials. -void -mjit_remove_class_serial(rb_serial_t class_serial) -{ - if (!mjit_enabled) - return; - - CRITICAL_SECTION_START(3, "in mjit_remove_class_serial"); - rb_hash_delete_entry(valid_class_serials, LONG2FIX(class_serial)); - CRITICAL_SECTION_FINISH(3, "in mjit_remove_class_serial"); -} - -#endif +#endif // USE_MJIT diff --git a/mjit.h b/mjit.h index dd23cf7caa..80138f74cb 100644 --- a/mjit.h +++ b/mjit.h @@ -101,8 +101,6 @@ extern void mjit_update_references(const rb_iseq_t *iseq); extern void mjit_mark(void); extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec); extern void mjit_cont_free(struct mjit_cont *cont); -extern void mjit_add_class_serial(rb_serial_t class_serial); -extern void mjit_remove_class_serial(rb_serial_t class_serial); extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body); // A threshold used to reject long iseqs from JITting as such iseqs @@ -206,8 +204,6 @@ static inline void mjit_gc_start_hook(void){} static inline void mjit_gc_exit_hook(void){} static inline void mjit_free_iseq(const rb_iseq_t *iseq){} static inline void mjit_mark(void){} -static inline void mjit_add_class_serial(rb_serial_t class_serial){} -static inline void mjit_remove_class_serial(rb_serial_t class_serial){} static inline VALUE mjit_exec(rb_execution_context_t *ec) { return Qundef; /* unreachable */ } static inline void mjit_child_after_fork(void){} diff --git a/mjit_worker.c b/mjit_worker.c index ba90cca7b6..ea6b896889 100644 --- a/mjit_worker.c +++ b/mjit_worker.c @@ -240,9 +240,6 @@ static bool worker_stopped; // Path of "/tmp", which can be changed to $TMP in MinGW. static char *tmp_dir; -// Hash like { 1 => true, 2 => true, ... } whose keys are valid `class_serial`s. -// This is used to invalidate obsoleted CALL_CACHE. -static VALUE valid_class_serials; // Used C compiler path. static const char *cc_path; @@ -488,16 +485,6 @@ real_ms_time(void) } #endif -// Return true if class_serial is not obsoleted. This is used by mjit_compile.c. -bool -mjit_valid_class_serial_p(rb_serial_t class_serial) -{ - CRITICAL_SECTION_START(3, "in valid_class_serial_p"); - bool found_p = rb_hash_stlike_lookup(valid_class_serials, LONG2FIX(class_serial), NULL); - CRITICAL_SECTION_FINISH(3, "in valid_class_serial_p"); - return found_p; -} - // Return the best unit from list. The best is the first // high priority unit or the unit whose iseq has the biggest number // of calls so far. diff --git a/vm.c b/vm.c index 696cffb202..faea6885a8 100644 --- a/vm.c +++ b/vm.c @@ -366,7 +366,6 @@ rb_serial_t rb_next_class_serial(void) { rb_serial_t class_serial = NEXT_CLASS_SERIAL(); - mjit_add_class_serial(class_serial); return class_serial; }