authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-02-23 20:29:59-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-02-23 20:30:59-05:00
log1f3d9f79c19c225b2043a1d0355cbc74addcf03a
treeaf079b529fd8f6a445b5ac4dd8d2e9aacb63419f
parentc0671a92c7f200a3c32d03db7b7e342c3efdd1fe

CBE: apply some maybe payload cleanups


1 files changed, 17 insertions(+), 29 deletions(-)

src/codegen/c.zig+17-29
......@@ -5356,11 +5356,6 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
53565356 // Ensure complete type definition is visible before accessing fields.
53575357 _ = try f.typeToIndex(struct_ty, .complete);
53585358
5359 const extra_name: CValue = switch (struct_ty.tag()) {
5360 .union_tagged, .union_safety_tagged => .{ .identifier = "payload" },
5361 else => .none,
5362 };
5363
53645359 const field_name: CValue = switch (struct_ty.tag()) {
53655360 .tuple, .anon_struct, .@"struct" => switch (struct_ty.containerLayout()) {
53665361 .Auto, .Extern => if (struct_ty.isSimpleTuple())
......@@ -5458,31 +5453,29 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
54585453 }
54595454
54605455 return local;
5461 } else .{
5462 .identifier = struct_ty.unionFields().keys()[extra.field_index],
5456 } else field_name: {
5457 const name = struct_ty.unionFields().keys()[extra.field_index];
5458 break :field_name if (struct_ty.unionTagTypeSafety()) |_|
5459 .{ .payload_identifier = name }
5460 else
5461 .{ .identifier = name };
54635462 },
54645463 else => unreachable,
54655464 };
54665465
5467 const is_array = lowersToArray(inst_ty, target);
54685466 const local = try f.allocLocal(inst, inst_ty);
5469 if (is_array) {
5467 if (lowersToArray(inst_ty, target)) {
54705468 try writer.writeAll("memcpy(");
54715469 try f.writeCValue(writer, local, .FunctionArgument);
54725470 try writer.writeAll(", ");
5473 } else {
5474 try f.writeCValue(writer, local, .Other);
5475 try writer.writeAll(" = ");
5476 }
5477 if (extra_name != .none) {
5478 try f.writeCValueMember(writer, struct_byval, extra_name);
5479 try writer.writeByte('.');
5480 try f.writeCValue(writer, field_name, .Other);
5481 } else try f.writeCValueMember(writer, struct_byval, field_name);
5482 if (is_array) {
5471 try f.writeCValueMember(writer, struct_byval, field_name);
54835472 try writer.writeAll(", sizeof(");
54845473 try f.renderType(writer, inst_ty);
54855474 try writer.writeAll("))");
5475 } else {
5476 try f.writeCValue(writer, local, .Other);
5477 try writer.writeAll(" = ");
5478 try f.writeCValueMember(writer, struct_byval, field_name);
54865479 }
54875480 try writer.writeAll(";\n");
54885481 return local;
......@@ -6700,7 +6693,7 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue {
67006693 return local;
67016694 }
67026695
6703 if (union_ty.unionTagTypeSafety()) |tag_ty| {
6696 const field: CValue = if (union_ty.unionTagTypeSafety()) |tag_ty| field: {
67046697 const layout = union_ty.unionGetLayout(target);
67056698 if (layout.tag_size != 0) {
67066699 const field_index = tag_ty.enumFieldIndex(field_name).?;
......@@ -6717,18 +6710,13 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue {
67176710 try f.writeCValue(writer, local, .Other);
67186711 try writer.print(".tag = {}; ", .{try f.fmtIntLiteral(tag_ty, int_val)});
67196712 }
6720 try f.writeCValue(writer, local, .Other);
6721 try writer.print(".payload.{ } = ", .{fmtIdent(field_name)});
6722 try f.writeCValue(writer, payload, .Other);
6723 try writer.writeAll(";\n");
6724 return local;
6725 }
6713 break :field .{ .payload_identifier = field_name };
6714 } else .{ .identifier = field_name };
67266715
6727 try f.writeCValue(writer, local, .Other);
6728 try writer.print(".{ } = ", .{fmtIdent(field_name)});
6716 try f.writeCValueMember(writer, local, field);
6717 try writer.writeAll(" = ");
67296718 try f.writeCValue(writer, payload, .Other);
67306719 try writer.writeAll(";\n");
6731
67326720 return local;
67336721}
67346722