diff --git a/src/codegen/x86_64/CodeGen.zig b/src/codegen/x86_64/CodeGen.zig index 48101500be..266aaffeab 100644 --- a/src/codegen/x86_64/CodeGen.zig +++ b/src/codegen/x86_64/CodeGen.zig @@ -177226,9 +177226,19 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void { 'x' => abi.RegisterClass.sse, else => unreachable, }; - if (input_mcv.isRegister() and - rc.isSet(RegisterManager.indexOfRegIntoTracked(input_mcv.getReg().?).?)) - break :arg input_mcv; + if (input_mcv.isRegister()) { + const reg = input_mcv.getReg().?; + if (rc.isSet(RegisterManager.indexOfRegIntoTracked(reg).?)) { + const alias = registerAlias(reg, @intCast(ty.abiSize(zcu))); + break :arg switch (input_mcv) { + else => unreachable, + .register => .{ .register = alias }, + .register_offset => |reg_off| .{ + .register_offset = .{ .reg = alias, .off = reg_off.off }, + }, + }; + } + } const reg = try self.register_manager.allocReg(null, rc); try self.genSetReg(reg, ty, input_mcv, .{}); break :arg .{ .register = registerAlias(reg, @intCast(ty.abiSize(zcu))) };