diff --git a/src/mir/RegAlloc.cpp b/src/mir/RegAlloc.cpp index 42e8933c..a2b04a97 100644 --- a/src/mir/RegAlloc.cpp +++ b/src/mir/RegAlloc.cpp @@ -765,13 +765,11 @@ namespace mir } } move_adj[v].clear(); - if (degree[u] >= K) - { - int new_deg = 0; - for (int n : adj[u]) - if (remaining.count(GetRep(n))) new_deg++; - degree[u] = new_deg; - } + // 合并后重新计算 u 的度数(邻接集已包含 v 的邻接) + int new_deg = 0; + for (int n : adj[u]) + if (remaining.count(GetRep(n))) new_deg++; + degree[u] = new_deg; if (degree[u] < K && !HasMovePair(u)) simplify_worklist.push_back(u); }; @@ -894,8 +892,6 @@ namespace mir } else { - if (!remaining.empty()) - { // spill cost: len(活跃指令数)*5 + ref(def+use总次数)*15 - degree(干涉度数)*25 // cost 越小越优先 spill —— 短区间、少引用、高冲突的变量更适合溢出 // 权重基于经验调节:degree 项主导,len/ref 项作为 tiebreaker @@ -950,7 +946,6 @@ namespace mir { break; } - } } }