| author | |
| committer | |
| log | b23a9579151b38e2b3539b9e4e8bbcd858cad2cb |
| tree | 64595ff8018ccfb4bad6b1e39f46d9d9daa9061f |
| parent | efd6ded716a027f7d47fe5c38df17785c8e2a2e2 |
Also rename corresponding `airStructFieldVal` functions ->
`airAggFieldVal`15 files changed, 41 insertions(+), 42 deletions(-)
src/Air.zig+3-4| ... | ... | @@ -688,8 +688,7 @@ pub const Inst = struct { |
| 688 | 688 | struct_field_ptr_index_3, |
| 689 | 689 | /// Given a byval struct or union and a field index, returns the field byval. |
| 690 | 690 | /// Uses the `ty_pl` field, payload is `StructField`. |
| 691 | /// TODO rename to `agg_field_val` | |
| 692 | struct_field_val, | |
| 691 | agg_field_val, | |
| 693 | 692 | /// Given a pointer to a tagged union, set its tag to the provided value. |
| 694 | 693 | /// Result type is always void. |
| 695 | 694 | /// Uses the `bin_op` field. LHS is union pointer, RHS is new tag value. |
| ... | ... | @@ -1684,7 +1683,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool) |
| 1684 | 1683 | .block, |
| 1685 | 1684 | .dbg_inline_block, |
| 1686 | 1685 | .struct_field_ptr, |
| 1687 | .struct_field_val, | |
| 1686 | .agg_field_val, | |
| 1688 | 1687 | .slice_elem_ptr, |
| 1689 | 1688 | .ptr_elem_ptr, |
| 1690 | 1689 | .cmpxchg_weak, |
| ... | ... | @@ -2079,7 +2078,7 @@ pub fn mustLower(air: Air, inst: Air.Inst.Index, ip: *const InternPool) bool { |
| 2079 | 2078 | .struct_field_ptr_index_1, |
| 2080 | 2079 | .struct_field_ptr_index_2, |
| 2081 | 2080 | .struct_field_ptr_index_3, |
| 2082 | .struct_field_val, | |
| 2081 | .agg_field_val, | |
| 2083 | 2082 | .get_union_tag, |
| 2084 | 2083 | .slice, |
| 2085 | 2084 | .slice_len, |
src/Air/Legalize.zig+11-11| ... | ... | @@ -181,8 +181,8 @@ pub const Feature = enum { |
| 181 | 181 | /// Currently assumes little endian and a specific integer layout where the lsb of every integer is the lsb of the |
| 182 | 182 | /// first byte of memory until bit pointers know their backing type. |
| 183 | 183 | expand_packed_store, |
| 184 | /// Replace `struct_field_val` of a packed field with a `bit_cast` to integer, `shr`, `trunc`, and `bit_cast` to field type. | |
| 185 | expand_packed_struct_field_val, | |
| 184 | /// Replace `agg_field_val` of a packed field with a `bit_cast` to integer, `shr`, `trunc`, and `bit_cast` to field type. | |
| 185 | expand_packed_agg_field_val, | |
| 186 | 186 | /// Replace `aggregate_init` of a packed struct with a sequence of `shl_exact`, `bit_cast`, `int_cast`, and `bit_or`. |
| 187 | 187 | expand_packed_aggregate_init, |
| 188 | 188 | |
| ... | ... | @@ -781,7 +781,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void { |
| 781 | 781 | .struct_field_ptr_index_2, |
| 782 | 782 | .struct_field_ptr_index_3, |
| 783 | 783 | => {}, |
| 784 | .struct_field_val => if (l.features.has(.expand_packed_struct_field_val)) { | |
| 784 | .agg_field_val => if (l.features.has(.expand_packed_agg_field_val)) { | |
| 785 | 785 | const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
| 786 | 786 | const extra = l.extraData(Air.StructField, ty_pl.payload).data; |
| 787 | 787 | switch (l.typeOf(extra.struct_operand).containerLayout(zcu)) { |
| ... | ... | @@ -1808,8 +1808,8 @@ fn scalarizeOverflowBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error! |
| 1808 | 1808 | // %9 = legalize_vec_elem_val(orig_lhs, %8) |
| 1809 | 1809 | // %10 = legalize_vec_elem_val(orig_rhs, %8) |
| 1810 | 1810 | // %11 = ???_with_overflow(struct { Int, u1 }, %9, %10) |
| 1811 | // %12 = struct_field_val(%11, 0) | |
| 1812 | // %13 = struct_field_val(%11, 1) | |
| 1811 | // %12 = agg_field_val(%11, 0) | |
| 1812 | // %13 = agg_field_val(%11, 1) | |
| 1813 | 1813 | // %14 = legalize_vec_store_elem(%4, %8, %12) |
| 1814 | 1814 | // %15 = legalize_vec_store_elem(%4, %8, %13) |
| 1815 | 1815 | // %16 = cmp_eq(%8, <usize, N-1>) |
| ... | ... | @@ -1861,7 +1861,7 @@ fn scalarizeOverflowBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error! |
| 1861 | 1861 | } }, |
| 1862 | 1862 | }).toRef(); |
| 1863 | 1863 | const int_elem = loop.block.add(l, .{ |
| 1864 | .tag = .struct_field_val, | |
| 1864 | .tag = .agg_field_val, | |
| 1865 | 1865 | .data = .{ .ty_pl = .{ |
| 1866 | 1866 | .ty = .fromType(scalar_int_ty), |
| 1867 | 1867 | .payload = try l.addExtra(Air.StructField, .{ |
| ... | ... | @@ -1871,7 +1871,7 @@ fn scalarizeOverflowBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error! |
| 1871 | 1871 | } }, |
| 1872 | 1872 | }).toRef(); |
| 1873 | 1873 | const overflow_elem = loop.block.add(l, .{ |
| 1874 | .tag = .struct_field_val, | |
| 1874 | .tag = .agg_field_val, | |
| 1875 | 1875 | .data = .{ .ty_pl = .{ |
| 1876 | 1876 | .ty = .u1_type, |
| 1877 | 1877 | .payload = try l.addExtra(Air.StructField, .{ |
| ... | ... | @@ -2343,14 +2343,14 @@ fn safeArithmeticBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, overflow_ |
| 2343 | 2343 | // The worst-case scenario is a vector operand: |
| 2344 | 2344 | // |
| 2345 | 2345 | // %1 = add_with_overflow(%x, %y) |
| 2346 | // %2 = struct_field_val(%1, .@"1") | |
| 2346 | // %2 = agg_field_val(%1, .@"1") | |
| 2347 | 2347 | // %3 = reduce(%2, .@"or") |
| 2348 | 2348 | // %4 = bit_cast(%3, @bool_type) |
| 2349 | 2349 | // %5 = cond_br(%4, { |
| 2350 | 2350 | // %6 = call(@panic.integerOverflow, []) |
| 2351 | 2351 | // %7 = unreach() |
| 2352 | 2352 | // }, { |
| 2353 | // %8 = struct_field_val(%1, .@"0") | |
| 2353 | // %8 = agg_field_val(%1, .@"0") | |
| 2354 | 2354 | // %9 = br(%z, %8) |
| 2355 | 2355 | // }) |
| 2356 | 2356 | var inst_buf: [9]Air.Inst.Index = undefined; |
| ... | ... | @@ -2369,7 +2369,7 @@ fn safeArithmeticBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, overflow_ |
| 2369 | 2369 | } }, |
| 2370 | 2370 | }); |
| 2371 | 2371 | const overflow_bits_inst = main_block.add(l, .{ |
| 2372 | .tag = .struct_field_val, | |
| 2372 | .tag = .agg_field_val, | |
| 2373 | 2373 | .data = .{ .ty_pl = .{ |
| 2374 | 2374 | .ty = Air.internedToRef(overflow_bits_ty.toIntern()), |
| 2375 | 2375 | .payload = try l.addExtra(Air.StructField, .{ |
| ... | ... | @@ -2393,7 +2393,7 @@ fn safeArithmeticBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, overflow_ |
| 2393 | 2393 | condbr.else_block = .init(condbr.then_block.stealRemainingCapacity()); |
| 2394 | 2394 | |
| 2395 | 2395 | const result_inst = condbr.else_block.add(l, .{ |
| 2396 | .tag = .struct_field_val, | |
| 2396 | .tag = .agg_field_val, | |
| 2397 | 2397 | .data = .{ .ty_pl = .{ |
| 2398 | 2398 | .ty = Air.internedToRef(operand_ty.toIntern()), |
| 2399 | 2399 | .payload = try l.addExtra(Air.StructField, .{ |
src/Air/Liveness.zig+1-1| ... | ... | @@ -680,7 +680,7 @@ fn analyzeInst( |
| 680 | 680 | const extra = a.air.extraData(Air.UnionInit, inst_datas[@intFromEnum(inst)].ty_pl.payload).data; |
| 681 | 681 | return analyzeOperands(a, pass, data, inst, .{ extra.init, .none, .none }); |
| 682 | 682 | }, |
| 683 | .struct_field_ptr, .struct_field_val, .spirv_runtime_array_len => { | |
| 683 | .struct_field_ptr, .agg_field_val, .spirv_runtime_array_len => { | |
| 684 | 684 | const extra = a.air.extraData(Air.StructField, inst_datas[@intFromEnum(inst)].ty_pl.payload).data; |
| 685 | 685 | return analyzeOperands(a, pass, data, inst, .{ extra.struct_operand, .none, .none }); |
| 686 | 686 | }, |
src/Air/Liveness/Verify.zig+1-1| ... | ... | @@ -198,7 +198,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void { |
| 198 | 198 | const extra = self.air.extraData(Air.UnionInit, ty_pl.payload).data; |
| 199 | 199 | try self.verifyInstOperands(inst, .{ extra.init, .none, .none }); |
| 200 | 200 | }, |
| 201 | .struct_field_ptr, .struct_field_val, .spirv_runtime_array_len => { | |
| 201 | .struct_field_ptr, .agg_field_val, .spirv_runtime_array_len => { | |
| 202 | 202 | const ty_pl = data[@intFromEnum(inst)].ty_pl; |
| 203 | 203 | const extra = self.air.extraData(Air.StructField, ty_pl.payload).data; |
| 204 | 204 | try self.verifyInstOperands(inst, .{ extra.struct_operand, .none, .none }); |
src/Air/Verify.zig+1-1| ... | ... | @@ -365,7 +365,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void { |
| 365 | 365 | .struct_field_ptr_index_1, |
| 366 | 366 | .struct_field_ptr_index_2, |
| 367 | 367 | .struct_field_ptr_index_3, |
| 368 | .struct_field_val, | |
| 368 | .agg_field_val, | |
| 369 | 369 | .set_union_tag, |
| 370 | 370 | .get_union_tag, |
| 371 | 371 | .slice, |
src/Air/print.zig+1-1| ... | ... | @@ -308,7 +308,7 @@ const Writer = struct { |
| 308 | 308 | => try w.writeDbgVar(s, inst), |
| 309 | 309 | |
| 310 | 310 | .struct_field_ptr => try w.writeStructField(s, inst), |
| 311 | .struct_field_val => try w.writeStructField(s, inst), | |
| 311 | .agg_field_val => try w.writeStructField(s, inst), | |
| 312 | 312 | .spirv_runtime_array_len => try w.writeStructField(s, inst), |
| 313 | 313 | .inferred_alloc => @panic("TODO"), |
| 314 | 314 | .inferred_alloc_comptime => @panic("TODO"), |
src/Sema.zig+1-1| ... | ... | @@ -671,7 +671,7 @@ pub const Block = struct { |
| 671 | 671 | field_ty: Type, |
| 672 | 672 | ) !Air.Inst.Ref { |
| 673 | 673 | return block.addInst(.{ |
| 674 | .tag = .struct_field_val, | |
| 674 | .tag = .agg_field_val, | |
| 675 | 675 | .data = .{ .ty_pl = .{ |
| 676 | 676 | .ty = Air.internedToRef(field_ty.toIntern()), |
| 677 | 677 | .payload = try block.sema.addExtra(Air.StructField{ |
src/codegen/aarch64/Select.zig+2-2| ... | ... | @@ -667,7 +667,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void { |
| 667 | 667 | air_inst_index = air_body[air_body_index]; |
| 668 | 668 | continue :air_tag air_tags[@intFromEnum(air_inst_index)]; |
| 669 | 669 | }, |
| 670 | .struct_field_ptr, .struct_field_val => { | |
| 670 | .struct_field_ptr, .agg_field_val => { | |
| 671 | 671 | const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl; |
| 672 | 672 | const extra = isel.air.extraData(Air.StructField, ty_pl.payload).data; |
| 673 | 673 | |
| ... | ... | @@ -5823,7 +5823,7 @@ pub fn body(isel: *Select, air_body: []const Air.Inst.Index) error{ OutOfMemory, |
| 5823 | 5823 | } |
| 5824 | 5824 | if (air.next()) |next_air_tag| continue :air_tag next_air_tag; |
| 5825 | 5825 | }, |
| 5826 | .struct_field_val => { | |
| 5826 | .agg_field_val => { | |
| 5827 | 5827 | if (isel.live_values.fetchRemove(air.inst_index)) |field_vi| unused: { |
| 5828 | 5828 | defer field_vi.value.deref(isel); |
| 5829 | 5829 |
src/codegen/c.zig+4-4| ... | ... | @@ -36,7 +36,7 @@ pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features { |
| 36 | 36 | |
| 37 | 37 | .expand_packed_load = true, |
| 38 | 38 | .expand_packed_store = true, |
| 39 | .expand_packed_struct_field_val = true, | |
| 39 | .expand_packed_agg_field_val = true, | |
| 40 | 40 | .expand_packed_aggregate_init = true, |
| 41 | 41 | |
| 42 | 42 | .scalarize_bit_cast_array = true, |
| ... | ... | @@ -2823,7 +2823,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) Error!void { |
| 2823 | 2823 | |
| 2824 | 2824 | .field_parent_ptr => try airFieldParentPtr(f, inst), |
| 2825 | 2825 | |
| 2826 | .struct_field_val => try airStructFieldVal(f, inst), | |
| 2826 | .agg_field_val => try airAggFieldVal(f, inst), | |
| 2827 | 2827 | .slice_ptr => try airSliceField(f, inst, false, "ptr"), |
| 2828 | 2828 | .slice_len => try airSliceField(f, inst, false, "len"), |
| 2829 | 2829 | |
| ... | ... | @@ -5527,7 +5527,7 @@ fn fieldPtr( |
| 5527 | 5527 | return local; |
| 5528 | 5528 | } |
| 5529 | 5529 | |
| 5530 | fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue { | |
| 5530 | fn airAggFieldVal(f: *Function, inst: Air.Inst.Index) !CValue { | |
| 5531 | 5531 | const pt = f.dg.pt; |
| 5532 | 5532 | const zcu = pt.zcu; |
| 5533 | 5533 | const ip = &zcu.intern_pool; |
| ... | ... | @@ -5542,7 +5542,7 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue { |
| 5542 | 5542 | const struct_ty = f.typeOf(extra.struct_operand); |
| 5543 | 5543 | const w = &f.code.writer; |
| 5544 | 5544 | |
| 5545 | assert(struct_ty.containerLayout(zcu) != .@"packed"); // `Air.Legalize.Feature.expand_packed_struct_field_val` handles this case | |
| 5545 | assert(struct_ty.containerLayout(zcu) != .@"packed"); // `Air.Legalize.Feature.expand_packed_agg_field_val` handles this case | |
| 5546 | 5546 | const field_name: CValue = switch (ip.indexToKey(struct_ty.toIntern())) { |
| 5547 | 5547 | .struct_type => .{ .identifier = struct_ty.structFieldName(extra.field_index, zcu).unwrap().?.toSlice(ip) }, |
| 5548 | 5548 | .union_type => name: { |
src/codegen/llvm/FuncGen.zig+2-2| ... | ... | @@ -539,7 +539,7 @@ fn genBody(self: *FuncGen, body: []const Air.Inst.Index, coverage_point: Air.Cov |
| 539 | 539 | .atomic_store_seq_cst => try self.airAtomicStore(inst, .seq_cst), |
| 540 | 540 | |
| 541 | 541 | .struct_field_ptr => try self.airStructFieldPtr(inst), |
| 542 | .struct_field_val => try self.airStructFieldVal(inst), | |
| 542 | .agg_field_val => try self.airAggFieldVal(inst), | |
| 543 | 543 | |
| 544 | 544 | .struct_field_ptr_index_0 => try self.airStructFieldPtrIndex(inst, 0), |
| 545 | 545 | .struct_field_ptr_index_1 => try self.airStructFieldPtrIndex(inst, 1), |
| ... | ... | @@ -2323,7 +2323,7 @@ fn airStructFieldPtrIndex( |
| 2323 | 2323 | return self.fieldPtr(struct_ptr, struct_ptr_ty, field_index); |
| 2324 | 2324 | } |
| 2325 | 2325 | |
| 2326 | fn airStructFieldVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value { | |
| 2326 | fn airAggFieldVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value { | |
| 2327 | 2327 | const o = self.object; |
| 2328 | 2328 | const zcu = o.zcu; |
| 2329 | 2329 | const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
src/codegen/riscv64/CodeGen.zig+3-3| ... | ... | @@ -1519,7 +1519,7 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void { |
| 1519 | 1519 | .store => try func.airStore(inst, false), |
| 1520 | 1520 | .store_safe => try func.airStore(inst, true), |
| 1521 | 1521 | .struct_field_ptr=> try func.airStructFieldPtr(inst), |
| 1522 | .struct_field_val=> try func.airStructFieldVal(inst), | |
| 1522 | .agg_field_val => try func.airAggFieldVal(inst), | |
| 1523 | 1523 | .float_from_int => try func.airFloatFromInt(inst), |
| 1524 | 1524 | .int_from_float => try func.airIntFromFloat(inst), |
| 1525 | 1525 | .cmpxchg_strong => try func.airCmpxchg(inst, .strong), |
| ... | ... | @@ -4591,7 +4591,7 @@ fn structFieldPtr(func: *Func, inst: Air.Inst.Index, operand: Air.Inst.Ref, inde |
| 4591 | 4591 | return dst_mcv.offset(field_offset); |
| 4592 | 4592 | } |
| 4593 | 4593 | |
| 4594 | fn airStructFieldVal(func: *Func, inst: Air.Inst.Index) !void { | |
| 4594 | fn airAggFieldVal(func: *Func, inst: Air.Inst.Index) !void { | |
| 4595 | 4595 | const pt = func.pt; |
| 4596 | 4596 | const zcu = pt.zcu; |
| 4597 | 4597 | |
| ... | ... | @@ -4688,7 +4688,7 @@ fn airStructFieldVal(func: *Func, inst: Air.Inst.Index) !void { |
| 4688 | 4688 | break :result dst_mcv; |
| 4689 | 4689 | } |
| 4690 | 4690 | |
| 4691 | return func.fail("TODO: airStructFieldVal load_frame field_off non multiple of 8", .{}); | |
| 4691 | return func.fail("TODO: airAggFieldVal load_frame field_off non multiple of 8", .{}); | |
| 4692 | 4692 | }, |
| 4693 | 4693 | else => return func.fail("TODO: airStructField {s}", .{@tagName(src_mcv)}), |
| 4694 | 4694 | } |
src/codegen/sparc64/CodeGen.zig+3-3| ... | ... | @@ -576,7 +576,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { |
| 576 | 576 | .store => try self.airStore(inst, false), |
| 577 | 577 | .store_safe => try self.airStore(inst, true), |
| 578 | 578 | .struct_field_ptr=> try self.airStructFieldPtr(inst), |
| 579 | .struct_field_val=> try self.airStructFieldVal(inst), | |
| 579 | .agg_field_val => try self.airAggFieldVal(inst), | |
| 580 | 580 | .array_to_slice => try self.airArrayToSlice(inst), |
| 581 | 581 | .float_from_int => try self.airFloatFromInt(inst), |
| 582 | 582 | .int_from_float => try self.airIntFromFloat(inst), |
| ... | ... | @@ -2473,7 +2473,7 @@ fn airStructFieldPtrIndex(self: *Self, inst: Air.Inst.Index, index: u8) !void { |
| 2473 | 2473 | return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); |
| 2474 | 2474 | } |
| 2475 | 2475 | |
| 2476 | fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void { | |
| 2476 | fn airAggFieldVal(self: *Self, inst: Air.Inst.Index) !void { | |
| 2477 | 2477 | const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
| 2478 | 2478 | const extra = self.air.extraData(Air.StructField, ty_pl.payload).data; |
| 2479 | 2479 | const operand = extra.struct_operand; |
| ... | ... | @@ -2536,7 +2536,7 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void { |
| 2536 | 2536 | else => unreachable, |
| 2537 | 2537 | } |
| 2538 | 2538 | }, |
| 2539 | else => return self.fail("TODO implement codegen struct_field_val for {}", .{mcv}), | |
| 2539 | else => return self.fail("TODO implement codegen agg_field_val for {}", .{mcv}), | |
| 2540 | 2540 | } |
| 2541 | 2541 | }; |
| 2542 | 2542 |
src/codegen/spirv/CodeGen.zig+2-2| ... | ... | @@ -4222,7 +4222,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) Error!void { |
| 4222 | 4222 | .get_union_tag => try cg.airGetUnionTag(inst), |
| 4223 | 4223 | .union_init => try cg.airUnionInit(inst), |
| 4224 | 4224 | |
| 4225 | .struct_field_val => try cg.airStructFieldVal(inst), | |
| 4225 | .agg_field_val => try cg.airAggFieldVal(inst), | |
| 4226 | 4226 | .field_parent_ptr => try cg.airFieldParentPtr(inst), |
| 4227 | 4227 | |
| 4228 | 4228 | .struct_field_ptr => try cg.airStructFieldPtr(inst), |
| ... | ... | @@ -6701,7 +6701,7 @@ fn airUnionInit(cg: *CodeGen, inst: Air.Inst.Index) !?Id { |
| 6701 | 6701 | return try cg.unionInit(ty, extra.field_index, payload); |
| 6702 | 6702 | } |
| 6703 | 6703 | |
| 6704 | fn airStructFieldVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id { | |
| 6704 | fn airAggFieldVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id { | |
| 6705 | 6705 | const pt = cg.pt; |
| 6706 | 6706 | const zcu = cg.zcu; |
| 6707 | 6707 | const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
src/codegen/wasm/CodeGen.zig+4-4| ... | ... | @@ -41,7 +41,7 @@ pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features { |
| 41 | 41 | |
| 42 | 42 | .expand_packed_load, |
| 43 | 43 | .expand_packed_store, |
| 44 | .expand_packed_struct_field_val, | |
| 44 | .expand_packed_agg_field_val, | |
| 45 | 45 | .expand_packed_aggregate_init, |
| 46 | 46 | |
| 47 | 47 | .scalarize_add, |
| ... | ... | @@ -1809,7 +1809,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| 1809 | 1809 | .struct_field_ptr_index_1 => cg.airStructFieldPtrIndex(inst, 1), |
| 1810 | 1810 | .struct_field_ptr_index_2 => cg.airStructFieldPtrIndex(inst, 2), |
| 1811 | 1811 | .struct_field_ptr_index_3 => cg.airStructFieldPtrIndex(inst, 3), |
| 1812 | .struct_field_val => cg.airStructFieldVal(inst), | |
| 1812 | .agg_field_val => cg.airAggFieldVal(inst), | |
| 1813 | 1813 | .field_parent_ptr => cg.airFieldParentPtr(inst), |
| 1814 | 1814 | |
| 1815 | 1815 | .switch_br => cg.airSwitchBr(inst, false), |
| ... | ... | @@ -5470,7 +5470,7 @@ fn structFieldPtr( |
| 5470 | 5470 | } |
| 5471 | 5471 | } |
| 5472 | 5472 | |
| 5473 | fn airStructFieldVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { | |
| 5473 | fn airAggFieldVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { | |
| 5474 | 5474 | const pt = cg.pt; |
| 5475 | 5475 | const zcu = pt.zcu; |
| 5476 | 5476 | const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
| ... | ... | @@ -5483,7 +5483,7 @@ fn airStructFieldVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| 5483 | 5483 | if (!field_ty.hasRuntimeBits(zcu)) return cg.finishAir(inst, .none, &.{struct_field.struct_operand}); |
| 5484 | 5484 | |
| 5485 | 5485 | const result: WValue = switch (struct_ty.containerLayout(zcu)) { |
| 5486 | .@"packed" => unreachable, // legalize .expand_packed_struct_field_val | |
| 5486 | .@"packed" => unreachable, // legalize .expand_packed_agg_field_val | |
| 5487 | 5487 | else => result: { |
| 5488 | 5488 | const offset = std.math.cast(u32, struct_ty.structFieldOffset(field_index, zcu)) orelse { |
| 5489 | 5489 | return cg.fail("Field type '{f}' too big to fit into stack frame", .{field_ty.fmt(pt)}); |
src/codegen/x86_64/CodeGen.zig+2-2| ... | ... | @@ -72,7 +72,7 @@ pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features { |
| 72 | 72 | |
| 73 | 73 | .expand_packed_load, |
| 74 | 74 | .expand_packed_store, |
| 75 | .expand_packed_struct_field_val, | |
| 75 | .expand_packed_agg_field_val, | |
| 76 | 76 | .expand_packed_aggregate_init, |
| 77 | 77 | }); |
| 78 | 78 | } |
| ... | ... | @@ -103965,7 +103965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 103965 | 103965 | )), cg); |
| 103966 | 103966 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 103967 | 103967 | }, |
| 103968 | .struct_field_val => { | |
| 103968 | .agg_field_val => { | |
| 103969 | 103969 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 103970 | 103970 | const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data; |
| 103971 | 103971 | const agg_ty = cg.typeOf(struct_field.struct_operand); |