authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-09-15 00:08:50-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-09-17 02:15:39+02:00
loged1617dd20cd5bf8618565472e898da8300f832d
tree6f24146e6bac6c55c27ec8a475bdded0931c1d12
parentd8147ba476217797d600b7e5f46f0a67a5b96188

x86_64: avoid emitting duplicate materialization

The earlier duplicates make assumptions that are not true yet. Close #36819

1 files changed, 5 insertions(+), 3 deletions(-)

src/codegen/x86_64/CodeGen.zig+5-3
...@@ -821,7 +821,8 @@ const InstTracking = struct {...@@ -821,7 +821,8 @@ const InstTracking = struct {
821 target: InstTracking,821 target: InstTracking,
822 ) !void {822 ) !void {
823 const ty = function.typeOfIndex(inst);823 const ty = function.typeOfIndex(inst);
824 if ((self.long == .none or self.long == .reserved_frame) and target.long == .load_frame)824 if ((self.long == .none or self.long == .reserved_frame) and
825 target.long == .load_frame and target.short != .load_frame)
825 try function.genCopy(ty, target.long, self.short, .{});826 try function.genCopy(ty, target.long, self.short, .{});
826 try function.genCopy(ty, target.short, self.short, .{});827 try function.genCopy(ty, target.short, self.short, .{});
827 }828 }
...@@ -174277,8 +174278,9 @@ fn restoreState(self: *CodeGen, state: State, deaths: []const Air.Inst.Index, co...@@ -174277,8 +174278,9 @@ fn restoreState(self: *CodeGen, state: State, deaths: []const Air.Inst.Index, co
174277 if (opts.emit_instructions and current_maybe_inst != target_maybe_inst) {174278 if (opts.emit_instructions and current_maybe_inst != target_maybe_inst) {
174278 if (current_maybe_inst) |current_inst|174279 if (current_maybe_inst) |current_inst|
174279 try self.inst_tracking.getPtr(current_inst).?.spill(self, current_inst);174280 try self.inst_tracking.getPtr(current_inst).?.spill(self, current_inst);
174280 if (target_maybe_inst) |target_inst|174281 if (target_maybe_inst) |target_inst| for (reg_tracking.getRegs()) |source_reg| {
174281 try self.inst_tracking.getPtr(target_inst).?.materialize(self, target_inst, reg_tracking);174282 if (RegisterManager.indexOfRegIntoTracked(source_reg).? > reg_index) break;
174283 } else try self.inst_tracking.getPtr(target_inst).?.materialize(self, target_inst, reg_tracking);
174282 }174284 }
174283 if (opts.update_tracking) {174285 if (opts.update_tracking) {
174284 if (current_maybe_inst) |current_inst| {174286 if (current_maybe_inst) |current_inst| {