Merge commit 'e4ad23a1a594a9da6b96655d4256352d5f6d277d' into midend
This commit is contained in:
@@ -461,6 +461,17 @@ void RISCv64RegAlloc::coalesce() {
|
||||
unsigned y = getAlias(*use.begin());
|
||||
unsigned u, v;
|
||||
if (precolored.count(y)) { u = y; v = x; } else { u = x; v = y; }
|
||||
|
||||
// 防御性检查,处理物理寄存器之间的传送指令
|
||||
if (precolored.count(u) && precolored.count(v)) {
|
||||
// 如果 u 和 v 都是物理寄存器,我们不能合并它们。
|
||||
// 这通常是一条寄存器拷贝指令,例如 `mv a2, a1`。
|
||||
// 把它加入 constrainedMoves 列表,然后直接返回,不再处理。
|
||||
constrainedMoves.insert(move);
|
||||
// addWorklist(u) 和 addWorklist(v) 在这里也不需要调用,
|
||||
// 因为它们只对虚拟寄存器有意义。
|
||||
return;
|
||||
}
|
||||
|
||||
if (DEEPERDEBUG) std::cerr << "[Coalesce] Processing move between " << regIdToString(x)
|
||||
<< " and " << regIdToString(y) << " (aliases " << regIdToString(u)
|
||||
|
||||
Reference in New Issue
Block a user