| author | |
| committer | |
| log | 8bc759e094cda907acc64c50b86ceb9d3a87213f |
| tree | f2ba3b00b7f3f8f143d476dd5823dc05c1a05427 |
| parent | 3faa550dc2d6b9a3a8e3be22fc927c8c5682d6c8 |
6 files changed, 28 insertions(+), 38 deletions(-)
src/AstGen.zig+3-4| ... | ... | @@ -2700,8 +2700,6 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As |
| 2700 | 2700 | .rem, |
| 2701 | 2701 | .shl_exact, |
| 2702 | 2702 | .shr_exact, |
| 2703 | .bit_offset_of, | |
| 2704 | .offset_of, | |
| 2705 | 2703 | .splat, |
| 2706 | 2704 | .reduce, |
| 2707 | 2705 | .shuffle, |
| ... | ... | @@ -9011,11 +9009,12 @@ fn offsetOf( |
| 9011 | 9009 | node: Ast.Node.Index, |
| 9012 | 9010 | lhs_node: Ast.Node.Index, |
| 9013 | 9011 | rhs_node: Ast.Node.Index, |
| 9014 | tag: Zir.Inst.Tag, | |
| 9012 | tag: Zir.Inst.Extended, | |
| 9015 | 9013 | ) InnerError!Zir.Inst.Ref { |
| 9016 | 9014 | const type_inst = try typeExpr(gz, scope, lhs_node); |
| 9017 | 9015 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, rhs_node); |
| 9018 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ | |
| 9016 | const result = try gz.addExtendedPayload(tag, Zir.Inst.BinNode{ | |
| 9017 | .node = gz.nodeIndexToRelative(node), | |
| 9019 | 9018 | .lhs = type_inst, |
| 9020 | 9019 | .rhs = field_name, |
| 9021 | 9020 | }); |
src/Autodoc.zig-2| ... | ... | @@ -1542,8 +1542,6 @@ fn walkInstruction( |
| 1542 | 1542 | .bitcast, |
| 1543 | 1543 | .vector_type, |
| 1544 | 1544 | // @check |
| 1545 | .bit_offset_of, | |
| 1546 | .offset_of, | |
| 1547 | 1545 | .splat, |
| 1548 | 1546 | .reduce, |
| 1549 | 1547 | .min, |
src/Sema.zig+15-15| ... | ... | @@ -1046,8 +1046,6 @@ fn analyzeBodyInner( |
| 1046 | 1046 | .has_field => try sema.zirHasField(block, inst), |
| 1047 | 1047 | .byte_swap => try sema.zirByteSwap(block, inst), |
| 1048 | 1048 | .bit_reverse => try sema.zirBitReverse(block, inst), |
| 1049 | .bit_offset_of => try sema.zirBitOffsetOf(block, inst), | |
| 1050 | .offset_of => try sema.zirOffsetOf(block, inst), | |
| 1051 | 1049 | .splat => try sema.zirSplat(block, inst), |
| 1052 | 1050 | .reduce => try sema.zirReduce(block, inst), |
| 1053 | 1051 | .shuffle => try sema.zirShuffle(block, inst), |
| ... | ... | @@ -1179,6 +1177,8 @@ fn analyzeBodyInner( |
| 1179 | 1177 | .work_group_size => try sema.zirWorkItem( block, extended, extended.opcode), |
| 1180 | 1178 | .work_group_id => try sema.zirWorkItem( block, extended, extended.opcode), |
| 1181 | 1179 | .in_comptime => try sema.zirInComptime( block), |
| 1180 | .bit_offset_of => try sema.zirBitOffsetOf( block, extended), | |
| 1181 | .offset_of => try sema.zirOffsetOf( block, extended), | |
| 1182 | 1182 | // zig fmt: on |
| 1183 | 1183 | |
| 1184 | 1184 | .fence => { |
| ... | ... | @@ -21743,24 +21743,24 @@ fn zirBitReverse(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! |
| 21743 | 21743 | } |
| 21744 | 21744 | } |
| 21745 | 21745 | |
| 21746 | fn zirBitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { | |
| 21747 | const offset = try sema.bitOffsetOf(block, inst); | |
| 21746 | fn zirBitOffsetOf(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { | |
| 21747 | const offset = try sema.bitOffsetOf(block, extended); | |
| 21748 | 21748 | return sema.addIntUnsigned(Type.comptime_int, offset); |
| 21749 | 21749 | } |
| 21750 | 21750 | |
| 21751 | fn zirOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { | |
| 21752 | const offset = try sema.bitOffsetOf(block, inst); | |
| 21751 | fn zirOffsetOf(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { | |
| 21752 | const offset = try sema.bitOffsetOf(block, extended); | |
| 21753 | 21753 | // TODO reminder to make this a compile error for packed structs |
| 21754 | 21754 | return sema.addIntUnsigned(Type.comptime_int, offset / 8); |
| 21755 | 21755 | } |
| 21756 | 21756 | |
| 21757 | fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u64 { | |
| 21758 | const inst_data = sema.code.instructions.items(.data)[inst].pl_node; | |
| 21759 | const src: LazySrcLoc = .{ .node_offset_bin_op = inst_data.src_node }; | |
| 21757 | fn bitOffsetOf(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!u64 { | |
| 21758 | const extra = sema.code.extraData(Zir.Inst.BinNode, extended.operand).data; | |
| 21759 | ||
| 21760 | const src: LazySrcLoc = .{ .node_offset_bin_op = extra.node }; | |
| 21760 | 21761 | sema.src = src; |
| 21761 | const lhs_src: LazySrcLoc = .{ .node_offset_bin_lhs = inst_data.src_node }; | |
| 21762 | const rhs_src: LazySrcLoc = .{ .node_offset_bin_rhs = inst_data.src_node }; | |
| 21763 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; | |
| 21762 | const lhs_src: LazySrcLoc = .{ .node_offset_bin_lhs = extra.node }; | |
| 21763 | const rhs_src: LazySrcLoc = .{ .node_offset_bin_rhs = extra.node }; | |
| 21764 | 21764 | |
| 21765 | 21765 | const ty = try sema.resolveType(block, lhs_src, extra.lhs); |
| 21766 | 21766 | const field_name = try sema.resolveConstStringIntern(block, rhs_src, extra.rhs, "name of field must be comptime-known"); |
| ... | ... | @@ -33840,9 +33840,9 @@ fn resolveUnionLayout(sema: *Sema, ty: Type) CompileError!void { |
| 33840 | 33840 | } |
| 33841 | 33841 | } |
| 33842 | 33842 | |
| 33843 | // In case of querying the ABI alignment of this struct, we will ask | |
| 33844 | // for hasRuntimeBits() of each field, so we need "requires comptime" | |
| 33845 | // to be known already before this function returns. | |
| 33843 | /// In case of querying the ABI alignment of this struct, we will ask | |
| 33844 | /// for hasRuntimeBits() of each field, so we need "requires comptime" | |
| 33845 | /// to be known already before this function returns. | |
| 33846 | 33846 | pub fn resolveTypeRequiresComptime(sema: *Sema, ty: Type) CompileError!bool { |
| 33847 | 33847 | const mod = sema.mod; |
| 33848 | 33848 |
src/Zir.zig+6-12| ... | ... | @@ -876,12 +876,6 @@ pub const Inst = struct { |
| 876 | 876 | /// Implements the `@bitReverse` builtin. Uses the `un_node` union field. |
| 877 | 877 | bit_reverse, |
| 878 | 878 | |
| 879 | /// Implements the `@bitOffsetOf` builtin. | |
| 880 | /// Uses the `pl_node` union field with payload `Bin`. | |
| 881 | bit_offset_of, | |
| 882 | /// Implements the `@offsetOf` builtin. | |
| 883 | /// Uses the `pl_node` union field with payload `Bin`. | |
| 884 | offset_of, | |
| 885 | 879 | /// Implements the `@splat` builtin. |
| 886 | 880 | /// Uses the `pl_node` union field with payload `Bin`. |
| 887 | 881 | splat, |
| ... | ... | @@ -1200,8 +1194,6 @@ pub const Inst = struct { |
| 1200 | 1194 | .rem, |
| 1201 | 1195 | .shl_exact, |
| 1202 | 1196 | .shr_exact, |
| 1203 | .bit_offset_of, | |
| 1204 | .offset_of, | |
| 1205 | 1197 | .splat, |
| 1206 | 1198 | .reduce, |
| 1207 | 1199 | .shuffle, |
| ... | ... | @@ -1484,8 +1476,6 @@ pub const Inst = struct { |
| 1484 | 1476 | .rem, |
| 1485 | 1477 | .shl_exact, |
| 1486 | 1478 | .shr_exact, |
| 1487 | .bit_offset_of, | |
| 1488 | .offset_of, | |
| 1489 | 1479 | .splat, |
| 1490 | 1480 | .reduce, |
| 1491 | 1481 | .shuffle, |
| ... | ... | @@ -1759,8 +1749,6 @@ pub const Inst = struct { |
| 1759 | 1749 | .shr = .pl_node, |
| 1760 | 1750 | .shr_exact = .pl_node, |
| 1761 | 1751 | |
| 1762 | .bit_offset_of = .pl_node, | |
| 1763 | .offset_of = .pl_node, | |
| 1764 | 1752 | .splat = .pl_node, |
| 1765 | 1753 | .reduce = .pl_node, |
| 1766 | 1754 | .shuffle = .pl_node, |
| ... | ... | @@ -2009,6 +1997,12 @@ pub const Inst = struct { |
| 2009 | 1997 | /// with a specific value. For instance, this is used for the capture of an `errdefer`. |
| 2010 | 1998 | /// This should never appear in a body. |
| 2011 | 1999 | value_placeholder, |
| 2000 | /// Implements the `@bitOffsetOf` builtin. | |
| 2001 | /// `operand` is payload index to `BinNode`. | |
| 2002 | bit_offset_of, | |
| 2003 | /// Implements the `@offsetOf` builtin. | |
| 2004 | /// `operand` is payload index to `BinNode`. | |
| 2005 | offset_of, | |
| 2012 | 2006 | |
| 2013 | 2007 | pub const InstData = struct { |
| 2014 | 2008 | opcode: Extended, |
src/codegen/llvm.zig+2-3| ... | ... | @@ -4940,8 +4940,7 @@ pub const FuncGen = struct { |
| 4940 | 4940 | const frame_alloca = fg.builder.buildArrayAlloca(llvm_i8, frame_size, ""); |
| 4941 | 4941 | frame_alloca.setAlignment(target.ptrBitWidth() / 4); |
| 4942 | 4942 | const frame_llvm_ty = try o.lowerAsyncFrameHeader(fn_info.return_type.toType()); |
| 4943 | const llvm_ptr_ty = fg.context.pointerType(0); | |
| 4944 | const frame_ptr = fg.builder.buildBitCast(frame_alloca, llvm_ptr_ty, ""); | |
| 4943 | const frame_ptr = fg.builder.buildBitCast(frame_alloca, o.context.pointerType(0), ""); | |
| 4945 | 4944 | const l = asyncFrameLayout(); |
| 4946 | 4945 | const fn_ptr_ptr = fg.builder.buildStructGEP(frame_llvm_ty, frame_ptr, l.fn_ptr, ""); |
| 4947 | 4946 | _ = fg.builder.buildStore(callee, fn_ptr_ptr); |
| ... | ... | @@ -4954,7 +4953,7 @@ pub const FuncGen = struct { |
| 4954 | 4953 | const awaiter_ptr = fg.builder.buildStructGEP(frame_llvm_ty, frame_ptr, l.awaiter, ""); |
| 4955 | 4954 | _ = fg.builder.buildStore(zero, awaiter_ptr); |
| 4956 | 4955 | |
| 4957 | var llvm_args = std.ArrayList(*llvm.Value).init(fg.gpa); | |
| 4956 | var llvm_args = std.ArrayList(*llvm.Value).init(o.gpa); | |
| 4958 | 4957 | defer llvm_args.deinit(); |
| 4959 | 4958 | |
| 4960 | 4959 | try addCallArgs(fg, args, &llvm_args, fn_info); |
src/print_zir.zig+2-2| ... | ... | @@ -335,8 +335,6 @@ const Writer = struct { |
| 335 | 335 | .div_trunc, |
| 336 | 336 | .mod, |
| 337 | 337 | .rem, |
| 338 | .bit_offset_of, | |
| 339 | .offset_of, | |
| 340 | 338 | .splat, |
| 341 | 339 | .reduce, |
| 342 | 340 | .bitcast, |
| ... | ... | @@ -526,6 +524,8 @@ const Writer = struct { |
| 526 | 524 | .wasm_memory_grow, |
| 527 | 525 | .prefetch, |
| 528 | 526 | .c_va_arg, |
| 527 | .bit_offset_of, | |
| 528 | .offset_of, | |
| 529 | 529 | => { |
| 530 | 530 | const inst_data = self.code.extraData(Zir.Inst.BinNode, extended.operand).data; |
| 531 | 531 | const src = LazySrcLoc.nodeOffset(inst_data.node); |