authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-19 22:28:23+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-19 19:32:06-08:00
log97290e0bfc38e75fb0e19f382a2187801bf4a458
tree602c30674442f0d121f2fefd5041e58ac165f95e
parent7461309b730f4a25f56d71b1a4d6c7dc6b16a39a

cbe: make more use of `InternPool.Index.Slice`

Attempts to fix the current CI failures introduced by #18983.

1 files changed, 62 insertions(+), 61 deletions(-)

src/codegen/c.zig+62-61
......@@ -900,9 +900,9 @@ pub const DeclGen = struct {
900900
901901 try writer.writeByte('{');
902902 var empty = true;
903 for (0..ty.structFieldCount(mod)) |field_i| {
904 if (ty.structFieldIsComptime(field_i, mod)) continue;
905 const field_ty = ty.structFieldType(field_i, mod);
903 for (0..ty.structFieldCount(mod)) |field_index| {
904 if (ty.structFieldIsComptime(field_index, mod)) continue;
905 const field_ty = ty.structFieldType(field_index, mod);
906906 if (!field_ty.hasRuntimeBits(mod)) continue;
907907
908908 if (!empty) try writer.writeByte(',');
......@@ -934,9 +934,10 @@ pub const DeclGen = struct {
934934 try writer.writeAll(" .payload = {");
935935 }
936936 const union_obj = mod.typeToUnion(ty).?;
937 for (union_obj.field_types.get(ip)) |field_ty| {
938 if (!Type.fromInterned(field_ty).hasRuntimeBits(mod)) continue;
939 try dg.renderValue(writer, Type.fromInterned(field_ty), val, initializer_type);
937 for (0..union_obj.field_types.len) |field_index| {
938 const field_ty = Type.fromInterned(union_obj.field_types.get(ip)[field_index]);
939 if (!field_ty.hasRuntimeBits(mod)) continue;
940 try dg.renderValue(writer, field_ty, val, initializer_type);
940941 break;
941942 }
942943 if (ty.unionTagTypeSafety(mod)) |_| try writer.writeByte('}');
......@@ -1354,25 +1355,23 @@ pub const DeclGen = struct {
13541355
13551356 try writer.writeByte('{');
13561357 var empty = true;
1357 for (
1358 tuple.types.get(ip),
1359 tuple.values.get(ip),
1360 0..,
1361 ) |field_ty, comptime_ty, field_i| {
1362 if (comptime_ty != .none) continue;
1363 if (!Type.fromInterned(field_ty).hasRuntimeBitsIgnoreComptime(mod)) continue;
1358 for (0..tuple.types.len) |field_index| {
1359 const comptime_val = tuple.values.get(ip)[field_index];
1360 if (comptime_val != .none) continue;
1361 const field_ty = Type.fromInterned(tuple.types.get(ip)[field_index]);
1362 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
13641363
13651364 if (!empty) try writer.writeByte(',');
13661365
1367 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
1366 const field_val = Value.fromInterned(switch (ip.indexToKey(val.ip_index).aggregate.storage) {
13681367 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1369 .ty = field_ty,
1370 .storage = .{ .u64 = bytes[field_i] },
1368 .ty = field_ty.toIntern(),
1369 .storage = .{ .u64 = bytes[field_index] },
13711370 } }),
1372 .elems => |elems| elems[field_i],
1371 .elems => |elems| elems[field_index],
13731372 .repeated_elem => |elem| elem,
1374 };
1375 try dg.renderValue(writer, Type.fromInterned(field_ty), Value.fromInterned(field_val), initializer_type);
1373 });
1374 try dg.renderValue(writer, field_ty, field_val, initializer_type);
13761375
13771376 empty = false;
13781377 }
......@@ -1388,18 +1387,18 @@ pub const DeclGen = struct {
13881387
13891388 try writer.writeByte('{');
13901389 var empty = true;
1391 for (0..struct_type.field_types.len) |field_i| {
1392 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_i]);
1393 if (struct_type.fieldIsComptime(ip, field_i)) continue;
1390 for (0..struct_type.field_types.len) |field_index| {
1391 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1392 if (struct_type.fieldIsComptime(ip, field_index)) continue;
13941393 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
13951394
13961395 if (!empty) try writer.writeByte(',');
13971396 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
13981397 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
13991398 .ty = field_ty.toIntern(),
1400 .storage = .{ .u64 = bytes[field_i] },
1399 .storage = .{ .u64 = bytes[field_index] },
14011400 } }),
1402 .elems => |elems| elems[field_i],
1401 .elems => |elems| elems[field_index],
14031402 .repeated_elem => |elem| elem,
14041403 };
14051404 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), initializer_type);
......@@ -1413,13 +1412,13 @@ pub const DeclGen = struct {
14131412
14141413 const bits = Type.smallestUnsignedBits(int_info.bits - 1);
14151414 const bit_offset_ty = try mod.intType(.unsigned, bits);
1416 const field_types = struct_type.field_types.get(ip);
14171415
14181416 var bit_offset: u64 = 0;
14191417 var eff_num_fields: usize = 0;
14201418
1421 for (field_types) |field_ty| {
1422 if (!Type.fromInterned(field_ty).hasRuntimeBitsIgnoreComptime(mod)) continue;
1419 for (0..struct_type.field_types.len) |field_index| {
1420 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1421 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
14231422 eff_num_fields += 1;
14241423 }
14251424
......@@ -1438,15 +1437,16 @@ pub const DeclGen = struct {
14381437
14391438 var eff_index: usize = 0;
14401439 var needs_closing_paren = false;
1441 for (field_types, 0..) |field_ty, field_i| {
1442 if (!Type.fromInterned(field_ty).hasRuntimeBitsIgnoreComptime(mod)) continue;
1440 for (0..struct_type.field_types.len) |field_index| {
1441 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1442 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
14431443
14441444 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
14451445 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1446 .ty = field_ty,
1447 .storage = .{ .u64 = bytes[field_i] },
1446 .ty = field_ty.toIntern(),
1447 .storage = .{ .u64 = bytes[field_index] },
14481448 } }),
1449 .elems => |elems| elems[field_i],
1449 .elems => |elems| elems[field_index],
14501450 .repeated_elem => |elem| elem,
14511451 };
14521452 const cast_context = IntCastContext{ .value = .{ .value = Value.fromInterned(field_val) } };
......@@ -1454,19 +1454,19 @@ pub const DeclGen = struct {
14541454 try writer.writeAll("zig_shl_");
14551455 try dg.renderTypeForBuiltinFnName(writer, ty);
14561456 try writer.writeByte('(');
1457 try dg.renderIntCast(writer, ty, cast_context, Type.fromInterned(field_ty), .FunctionArgument);
1457 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
14581458 try writer.writeAll(", ");
14591459 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
14601460 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
14611461 try writer.writeByte(')');
14621462 } else {
1463 try dg.renderIntCast(writer, ty, cast_context, Type.fromInterned(field_ty), .FunctionArgument);
1463 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
14641464 }
14651465
14661466 if (needs_closing_paren) try writer.writeByte(')');
14671467 if (eff_index != eff_num_fields - 1) try writer.writeAll(", ");
14681468
1469 bit_offset += Type.fromInterned(field_ty).bitSize(mod);
1469 bit_offset += field_ty.bitSize(mod);
14701470 needs_closing_paren = true;
14711471 eff_index += 1;
14721472 }
......@@ -1474,8 +1474,9 @@ pub const DeclGen = struct {
14741474 try writer.writeByte('(');
14751475 // a << a_off | b << b_off | c << c_off
14761476 var empty = true;
1477 for (field_types, 0..) |field_ty, field_i| {
1478 if (!Type.fromInterned(field_ty).hasRuntimeBitsIgnoreComptime(mod)) continue;
1477 for (0..struct_type.field_types.len) |field_index| {
1478 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1479 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
14791480
14801481 if (!empty) try writer.writeAll(" | ");
14811482 try writer.writeByte('(');
......@@ -1484,23 +1485,23 @@ pub const DeclGen = struct {
14841485
14851486 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
14861487 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1487 .ty = field_ty,
1488 .storage = .{ .u64 = bytes[field_i] },
1488 .ty = field_ty.toIntern(),
1489 .storage = .{ .u64 = bytes[field_index] },
14891490 } }),
1490 .elems => |elems| elems[field_i],
1491 .elems => |elems| elems[field_index],
14911492 .repeated_elem => |elem| elem,
14921493 };
14931494
14941495 if (bit_offset != 0) {
1495 try dg.renderValue(writer, Type.fromInterned(field_ty), Value.fromInterned(field_val), .Other);
1496 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);
14961497 try writer.writeAll(" << ");
14971498 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
14981499 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
14991500 } else {
1500 try dg.renderValue(writer, Type.fromInterned(field_ty), Value.fromInterned(field_val), .Other);
1501 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);
15011502 }
15021503
1503 bit_offset += Type.fromInterned(field_ty).bitSize(mod);
1504 bit_offset += field_ty.bitSize(mod);
15041505 empty = false;
15051506 }
15061507 try writer.writeByte(')');
......@@ -1545,9 +1546,9 @@ pub const DeclGen = struct {
15451546 try writer.writeByte(')');
15461547 }
15471548
1548 const field_i = mod.unionTagFieldIndex(union_obj, Value.fromInterned(un.tag)).?;
1549 const field_ty = Type.fromInterned(union_obj.field_types.get(ip)[field_i]);
1550 const field_name = union_obj.field_names.get(ip)[field_i];
1549 const field_index = mod.unionTagFieldIndex(union_obj, Value.fromInterned(un.tag)).?;
1550 const field_ty = Type.fromInterned(union_obj.field_types.get(ip)[field_index]);
1551 const field_name = union_obj.field_names.get(ip)[field_index];
15511552 if (union_obj.getLayout(ip) == .Packed) {
15521553 if (field_ty.hasRuntimeBits(mod)) {
15531554 if (field_ty.isPtrAtRuntime(mod)) {
......@@ -1581,9 +1582,10 @@ pub const DeclGen = struct {
15811582 try writer.print(" .{ } = ", .{fmtIdent(ip.stringToSlice(field_name))});
15821583 try dg.renderValue(writer, field_ty, Value.fromInterned(un.val), initializer_type);
15831584 try writer.writeByte(' ');
1584 } else for (union_obj.field_types.get(ip)) |this_field_ty| {
1585 if (!Type.fromInterned(this_field_ty).hasRuntimeBits(mod)) continue;
1586 try dg.renderValue(writer, Type.fromInterned(this_field_ty), Value.undef, initializer_type);
1585 } else for (0..union_obj.field_types.len) |this_field_index| {
1586 const this_field_ty = Type.fromInterned(union_obj.field_types.get(ip)[this_field_index]);
1587 if (!this_field_ty.hasRuntimeBits(mod)) continue;
1588 try dg.renderValue(writer, this_field_ty, Value.undef, initializer_type);
15871589 break;
15881590 }
15891591 if (ty.unionTagTypeSafety(mod)) |_| try writer.writeByte('}');
......@@ -7090,17 +7092,16 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
70907092 }
70917093 },
70927094 .Struct => switch (inst_ty.containerLayout(mod)) {
7093 .Auto, .Extern => for (resolved_elements, 0..) |element, field_i_usize| {
7094 const field_i: u32 = @intCast(field_i_usize);
7095 if (inst_ty.structFieldIsComptime(field_i, mod)) continue;
7096 const field_ty = inst_ty.structFieldType(field_i, mod);
7095 .Auto, .Extern => for (resolved_elements, 0..) |element, field_index| {
7096 if (inst_ty.structFieldIsComptime(field_index, mod)) continue;
7097 const field_ty = inst_ty.structFieldType(field_index, mod);
70977098 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
70987099
70997100 const a = try Assignment.start(f, writer, field_ty);
71007101 try f.writeCValueMember(writer, local, if (inst_ty.isSimpleTuple(mod))
7101 .{ .field = field_i }
7102 .{ .field = field_index }
71027103 else
7103 .{ .identifier = ip.stringToSlice(inst_ty.legacyStructFieldName(field_i, mod)) });
7104 .{ .identifier = ip.stringToSlice(inst_ty.legacyStructFieldName(@intCast(field_index), mod)) });
71047105 try a.assign(f, writer);
71057106 try f.writeCValue(writer, element, .Other);
71067107 try a.end(f, writer);
......@@ -7115,9 +7116,9 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
71157116 var bit_offset: u64 = 0;
71167117
71177118 var empty = true;
7118 for (0..elements.len) |field_i| {
7119 if (inst_ty.structFieldIsComptime(field_i, mod)) continue;
7120 const field_ty = inst_ty.structFieldType(field_i, mod);
7119 for (0..elements.len) |field_index| {
7120 if (inst_ty.structFieldIsComptime(field_index, mod)) continue;
7121 const field_ty = inst_ty.structFieldType(field_index, mod);
71217122 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
71227123
71237124 if (!empty) {
......@@ -7128,9 +7129,9 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
71287129 empty = false;
71297130 }
71307131 empty = true;
7131 for (resolved_elements, 0..) |element, field_i| {
7132 if (inst_ty.structFieldIsComptime(field_i, mod)) continue;
7133 const field_ty = inst_ty.structFieldType(field_i, mod);
7132 for (resolved_elements, 0..) |element, field_index| {
7133 if (inst_ty.structFieldIsComptime(field_index, mod)) continue;
7134 const field_ty = inst_ty.structFieldType(field_index, mod);
71347135 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
71357136
71367137 if (!empty) try writer.writeAll(", ");