authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-06-09 02:35:45-04:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-06-12 17:51:29+01:00
log56119699bf5fbb44d844d4ad181d51629f754be8
tree6e307e9a67fa9dd2f176c7c8d9f40cc68b1bea69
parenta3abaaee0c1fa9a9d9d2ee47459e9b6ebb1938fa
signaturelock-open Commit is signed but in an unrecognized format.

x86_64: fix `dbg_var_ptr` types in debug info


2 files changed, 17 insertions(+), 12 deletions(-)

src/arch/x86_64/CodeGen.zig+17-10
...@@ -85046,13 +85046,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -85046,13 +85046,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85046 .data = .{ .ip_index = old_inline_func },85046 .data = .{ .ip_index = old_inline_func },
85047 });85047 });
85048 },85048 },
85049 .dbg_var_ptr,85049 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => |air_tag| if (use_old) try cg.airDbgVar(inst) else if (!cg.mod.strip) {
85050 .dbg_var_val,
85051 .dbg_arg_inline,
85052 => |air_tag| if (use_old) try cg.airDbgVar(inst) else if (!cg.mod.strip) {
85053 const pl_op = air_datas[@intFromEnum(inst)].pl_op;85050 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
85054 const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);85051 const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
85055 const ty = cg.typeOf(pl_op.operand);85052 const op_ty = cg.typeOf(pl_op.operand);
85053 const local_ty = switch (air_tag) {
85054 else => unreachable,
85055 .dbg_var_ptr => op_ty.childType(zcu),
85056 .dbg_var_val, .dbg_arg_inline => op_ty,
85057 };
85056 var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});85058 var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});
85057 var mcv = ops[0].tracking(cg).short;85059 var mcv = ops[0].tracking(cg).short;
85058 switch (mcv) {85060 switch (mcv) {
...@@ -85076,10 +85078,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -85076,10 +85078,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85076 },85078 },
85077 else => try cg.addString(air_name.toSlice(cg.air)),85079 else => try cg.addString(air_name.toSlice(cg.air)),
85078 },85080 },
85079 .type = ty.toIntern(),85081 .type = local_ty.toIntern(),
85080 });85082 });
8508185083
85082 try cg.genLocalDebugInfo(air_tag, ty, ops[0].tracking(cg).short);85084 try cg.genLocalDebugInfo(air_tag, local_ty, ops[0].tracking(cg).short);
85083 try ops[0].die(cg);85085 try ops[0].die(cg);
85084 },85086 },
85085 .is_null => if (use_old) try cg.airIsNull(inst) else {85087 .is_null => if (use_old) try cg.airIsNull(inst) else {
...@@ -174364,7 +174366,12 @@ fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {...@@ -174364,7 +174366,12 @@ fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {
174364 const air_tag = cg.air.instructions.items(.tag)[@intFromEnum(inst)];174366 const air_tag = cg.air.instructions.items(.tag)[@intFromEnum(inst)];
174365 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;174367 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
174366 const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);174368 const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
174367 const ty = cg.typeOf(pl_op.operand);174369 const op_ty = cg.typeOf(pl_op.operand);
174370 const local_ty = switch (air_tag) {
174371 else => unreachable,
174372 .dbg_var_ptr => op_ty.childType(cg.pt.zcu),
174373 .dbg_var_val, .dbg_arg_inline => op_ty,
174374 };
174368174375
174369 try cg.mir_locals.append(cg.gpa, .{174376 try cg.mir_locals.append(cg.gpa, .{
174370 .name = switch (air_name) {174377 .name = switch (air_name) {
...@@ -174374,10 +174381,10 @@ fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {...@@ -174374,10 +174381,10 @@ fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {
174374 },174381 },
174375 else => try cg.addString(air_name.toSlice(cg.air)),174382 else => try cg.addString(air_name.toSlice(cg.air)),
174376 },174383 },
174377 .type = ty.toIntern(),174384 .type = local_ty.toIntern(),
174378 });174385 });
174379174386
174380 try cg.genLocalDebugInfo(air_tag, ty, try cg.resolveInst(pl_op.operand));174387 try cg.genLocalDebugInfo(air_tag, local_ty, try cg.resolveInst(pl_op.operand));
174381 return cg.finishAir(inst, .unreach, .{ pl_op.operand, .none, .none });174388 return cg.finishAir(inst, .unreach, .{ pl_op.operand, .none, .none });
174382}174389}
174383174390
src/arch/x86_64/bits.zig-2
...@@ -686,8 +686,6 @@ test "Register id - different classes" {...@@ -686,8 +686,6 @@ test "Register id - different classes" {
686 try expect(Register.xmm0.id() == Register.ymm0.id());686 try expect(Register.xmm0.id() == Register.ymm0.id());
687 try expect(Register.xmm0.id() != Register.mm0.id());687 try expect(Register.xmm0.id() != Register.mm0.id());
688 try expect(Register.mm0.id() != Register.st0.id());688 try expect(Register.mm0.id() != Register.st0.id());
689
690 try expect(Register.es.id() == 0b110000);
691}689}
692690
693test "Register enc - different classes" {691test "Register enc - different classes" {