diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-07 15:27:05 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-07 15:27:05 -0700 |
| commit | 76335bc7badd41af0ebb7dd196e1550d7e99d8e7 (patch) | |
| tree | 4057c1def983d9ea39d67e617e52820fed61331f /src/AstGen.zig | |
| parent | 601ac82041653adc2acbcfd947a54286944df9df (diff) | |
| download | zig-76335bc7badd41af0ebb7dd196e1550d7e99d8e7.tar.gz zig-76335bc7badd41af0ebb7dd196e1550d7e99d8e7.zip | |
stage2: implement array literal with explicit type
New ZIR instruction: elem_ptr_imm
This saves some memory for array literals since the element indexes are
communicated as immediate values rather than as references to other ZIR
instructions.
Diffstat (limited to 'src/AstGen.zig')
| -rw-r--r-- | src/AstGen.zig | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig index 6e7f376b16..423e11e582 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -1352,15 +1352,14 @@ fn arrayInitExprRlPtr( defer gpa.free(elem_ptr_list); for (elements) |elem_init, i| { - const index_inst = try gz.addInt(i); - const elem_ptr = try gz.addPlNode(.elem_ptr_node, elem_init, Zir.Inst.Bin{ - .lhs = result_ptr, - .rhs = index_inst, + const elem_ptr = try gz.addPlNode(.elem_ptr_imm, elem_init, Zir.Inst.ElemPtrImm{ + .ptr = result_ptr, + .index = @intCast(u32, i), }); elem_ptr_list[i] = refToIndex(elem_ptr).?; _ = try expr(gz, scope, .{ .ptr = elem_ptr }, elem_init); } - _ = try gz.addPlNode(.validate_array_init_ptr, node, Zir.Inst.Block{ + _ = try gz.addPlNode(.validate_array_init, node, Zir.Inst.Block{ .body_len = @intCast(u32, elem_ptr_list.len), }); try astgen.extra.appendSlice(gpa, elem_ptr_list); @@ -1539,7 +1538,7 @@ fn structInitExprRlPtrInner( field_ptr_list[i] = refToIndex(field_ptr).?; _ = try expr(gz, scope, .{ .ptr = field_ptr }, field_init); } - _ = try gz.addPlNode(.validate_struct_init_ptr, node, Zir.Inst.Block{ + _ = try gz.addPlNode(.validate_struct_init, node, Zir.Inst.Block{ .body_len = @intCast(u32, field_ptr_list.len), }); try astgen.extra.appendSlice(gpa, field_ptr_list); @@ -2040,6 +2039,7 @@ fn unusedResultExpr(gz: *GenZir, scope: *Scope, statement: Ast.Node.Index) Inner .elem_ptr, .elem_val, .elem_ptr_node, + .elem_ptr_imm, .elem_val_node, .field_ptr, .field_val, @@ -2246,8 +2246,8 @@ fn unusedResultExpr(gz: *GenZir, scope: *Scope, statement: Ast.Node.Index) Inner .store_to_block_ptr, .store_to_inferred_ptr, .resolve_inferred_alloc, - .validate_struct_init_ptr, - .validate_array_init_ptr, + .validate_struct_init, + .validate_array_init, .set_align_stack, .set_cold, .set_float_mode, |
