fix: 消除用于自我赋值的冗余移动指令

This commit is contained in:
Luke 2025-06-13 10:42:14 +08:00
parent 91bc1f15cc
commit 616d361c9d

View File

@ -78,7 +78,7 @@ public class InstructionFactory {
}
/**
* 简易 Move 指令src dest若寄存器相同也安全
* Move 指令src dest若寄存器相同也安全
* <p>
* 实现方式dest = src + 0即加上常量 0
* </p>
@ -88,7 +88,11 @@ public class InstructionFactory {
* @param dest 目标寄存器
*/
public static void move(IRContext ctx, IRVirtualRegister src, IRVirtualRegister dest) {
/* 采用 “dest = src + 0” 的最简实现 */
// 自赋值无需任何操作避免生成多余的常量 0 寄存器
if (src == dest) {
return;
}
// 回退实现dest = src + 0
IRVirtualRegister zero = loadConst(ctx, 0);
ctx.addInstruction(new BinaryOperationInstruction(IROpCode.ADD_I32, dest, src, zero));
}