From 14483c40ac76756ff956f53ebfd0ce62744dee2d Mon Sep 17 00:00:00 2001 From: "yu.dongliang" <18588496441@163.com> Date: Sun, 10 Aug 2025 10:22:21 +0800 Subject: [PATCH] fix: auto gc _find_dn_active() --- core/scf_optimizer_auto_gc.c | 46 ++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/core/scf_optimizer_auto_gc.c b/core/scf_optimizer_auto_gc.c index 822c25a..2b1ab06 100644 --- a/core/scf_optimizer_auto_gc.c +++ b/core/scf_optimizer_auto_gc.c @@ -22,23 +22,50 @@ static int _find_ds_malloced(scf_basic_block_t* bb, void* data) return 0; } -static int _find_dn_active(scf_basic_block_t* bb, void* data) +static int __find_dn_active(scf_vector_t* dn_vec, scf_dag_node_t* dn) { - scf_dag_node_t* dn = data; + scf_dn_status_t* ds = NULL; + scf_dag_node_t* dn2; + int i; - if (scf_vector_find(bb->dn_loads, data)) - return 1; + for (i = 0; i < dn_vec->size; i++) { + dn2 = dn_vec->data[i]; - if (scf_vector_find(bb->dn_reloads, data)) - return 1; + if (dn2 == dn) + return 1; - if (scf_vector_find(bb->entry_dn_actives, data)) - return 1; + int ret = scf_ds_for_dn(&ds, dn2); + if (ret < 0) + return ret; + + if (ds->dag_node == dn) { + scf_dn_status_free(ds); + return 1; + } + + scf_dn_status_free(ds); + ds = NULL; + } - scf_logd("bb: %p, dn: %s, 0\n", bb, dn->var->w->text->data); return 0; } +static int _find_dn_active(scf_basic_block_t* bb, void* data) +{ + scf_dag_node_t* dn = data; + + int ret = __find_dn_active(bb->dn_loads, dn); + if (0 == ret) { + ret = __find_dn_active(bb->dn_reloads, dn); + + if (0 == ret) + ret = __find_dn_active(bb->entry_dn_actives, dn); + } + + scf_logd("bb: %p, dn: %s, 0\n", bb, dn->var->w->text->data); + return ret; +} + static int _bb_find_ds_malloced(scf_basic_block_t* root, scf_list_t* bb_list_head, scf_dn_status_t* ds, scf_vector_t* results) { scf_basic_block_visit_flag(bb_list_head, 0); @@ -1014,7 +1041,6 @@ static int _optimize_auto_gc(scf_ast_t* ast, scf_function_t* f, scf_vector_t* fu } } -// scf_basic_block_print_list(bb_list_head); return 0; } -- 2.25.1