authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-09 07:39:34-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-10 06:10:15-05:00
log4e581427d1fee46cdcab088cb2c1d7ad51b06239
treee6141cafd3b14ad486e55e5dd5dd4213d979badc
parentb36ea592b86ef20473697ded24a27bb644941de8

x86_64: fix miscomp where in use register is marked as free


1 files changed, 7 insertions(+), 7 deletions(-)

src/register_manager.zig+7-7
......@@ -352,15 +352,15 @@ pub fn RegisterManager(
352352 ) AllocateRegistersError!void {
353353 log.debug("getReg {} for inst {?}", .{ regAtTrackedIndex(tracked_index), inst });
354354 if (!self.isRegIndexFree(tracked_index)) {
355 self.markRegIndexAllocated(tracked_index);
356
357355 // Move the instruction that was previously there to a
358356 // stack allocation.
359 const spilled_inst = self.registers[tracked_index];
360 if (inst) |tracked_inst| self.registers[tracked_index] = tracked_inst;
361 try self.getFunction().spillInstruction(regAtTrackedIndex(tracked_index), spilled_inst);
362 if (inst == null) self.freeRegIndex(tracked_index);
363 } else self.getRegIndexAssumeFree(tracked_index, inst);
357 try self.getFunction().spillInstruction(
358 regAtTrackedIndex(tracked_index),
359 self.registers[tracked_index],
360 );
361 self.freeRegIndex(tracked_index);
362 }
363 self.getRegIndexAssumeFree(tracked_index, inst);
364364 }
365365 pub fn getReg(self: *Self, reg: Register, inst: ?Air.Inst.Index) AllocateRegistersError!void {
366366 log.debug("getting reg: {}", .{reg});