x64: mul_with_overflow: cannot reuse operand if not the result

This commit is contained in:
Jakub Konka 2022-05-05 21:35:59 +02:00
parent 0728847ce7
commit e3160ec573

View File

@ -1496,11 +1496,8 @@ fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
rhs.freezeIfRegister(&self.register_manager); rhs.freezeIfRegister(&self.register_manager);
defer rhs.unfreezeIfRegister(&self.register_manager); defer rhs.unfreezeIfRegister(&self.register_manager);
// TODO check if we could reuse rhs instead, and swap the values out.
const dst_reg: Register = blk: { const dst_reg: Register = blk: {
if (self.reuseOperand(inst, bin_op.lhs, 0, lhs)) { if (lhs.isRegister()) break :blk lhs.register;
if (lhs.isRegister()) break :blk lhs.register;
}
break :blk try self.copyToTmpRegister(ty, lhs); break :blk try self.copyToTmpRegister(ty, lhs);
}; };
self.register_manager.freezeRegs(&.{dst_reg}); self.register_manager.freezeRegs(&.{dst_reg});