aboutsummaryrefslogtreecommitdiff
path: root/src/AstGen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-10-07 15:27:05 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-10-07 15:27:05 -0700
commit76335bc7badd41af0ebb7dd196e1550d7e99d8e7 (patch)
tree4057c1def983d9ea39d67e617e52820fed61331f /src/AstGen.zig
parent601ac82041653adc2acbcfd947a54286944df9df (diff)
downloadzig-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.zig16
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,