x86_64: use correct alias for register constraints stored in registers

Closes #31722
This commit is contained in:
Jacob Young
2026-04-02 01:49:00 -04:00
committed by Andrew Kelley
parent dd10d3fb52
commit 4059242f44
+13 -3
View File
@@ -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))) };