From 4e581427d1fee46cdcab088cb2c1d7ad51b06239 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 9 Jan 2025 07:39:34 -0500 Subject: [PATCH] x86_64: fix miscomp where in use register is marked as free --- src/register_manager.zig | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/register_manager.zig b/src/register_manager.zig index 0b569467e7..c24cda6cf5 100644 --- a/src/register_manager.zig +++ b/src/register_manager.zig @@ -352,15 +352,15 @@ pub fn RegisterManager( ) AllocateRegistersError!void { log.debug("getReg {} for inst {?}", .{ regAtTrackedIndex(tracked_index), inst }); if (!self.isRegIndexFree(tracked_index)) { - self.markRegIndexAllocated(tracked_index); - // Move the instruction that was previously there to a // stack allocation. - const spilled_inst = self.registers[tracked_index]; - if (inst) |tracked_inst| self.registers[tracked_index] = tracked_inst; - try self.getFunction().spillInstruction(regAtTrackedIndex(tracked_index), spilled_inst); - if (inst == null) self.freeRegIndex(tracked_index); - } else self.getRegIndexAssumeFree(tracked_index, inst); + try self.getFunction().spillInstruction( + regAtTrackedIndex(tracked_index), + self.registers[tracked_index], + ); + self.freeRegIndex(tracked_index); + } + self.getRegIndexAssumeFree(tracked_index, inst); } pub fn getReg(self: *Self, reg: Register, inst: ?Air.Inst.Index) AllocateRegistersError!void { log.debug("getting reg: {}", .{reg});