aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorJacob G-W <jacoblevgw@gmail.com>2021-08-16 23:11:55 -0400
committerAndrew Kelley <andrew@ziglang.org>2021-08-21 23:52:55 -0400
commit4ac37eb484737e98269e198b31b81ee8e929b4f1 (patch)
tree2d5e66fcd1a2f6c9f129583d2ea8f671fff4832b /src/Sema.zig
parentf378b0adce80aa6f85d9bf6bf97172426de2c719 (diff)
downloadzig-4ac37eb484737e98269e198b31b81ee8e929b4f1.tar.gz
zig-4ac37eb484737e98269e198b31b81ee8e929b4f1.zip
stage2 Air: add struct_field_ptr_index_{0..3}
Since these are very common, it will save memory.
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index d543b59ac0..a11bdec66d 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -8119,14 +8119,29 @@ fn structFieldPtr(
}
try sema.requireRuntimeBlock(block, src);
+ const tag: Air.Inst.Tag = switch (field_index) {
+ 0 => .struct_field_ptr_index_0,
+ 1 => .struct_field_ptr_index_1,
+ 2 => .struct_field_ptr_index_2,
+ 3 => .struct_field_ptr_index_3,
+ else => {
+ return block.addInst(.{
+ .tag = .struct_field_ptr,
+ .data = .{ .ty_pl = .{
+ .ty = try sema.addType(ptr_field_ty),
+ .payload = try sema.addExtra(Air.StructField{
+ .struct_operand = struct_ptr,
+ .field_index = @intCast(u32, field_index),
+ }),
+ } },
+ });
+ },
+ };
return block.addInst(.{
- .tag = .struct_field_ptr,
- .data = .{ .ty_pl = .{
+ .tag = tag,
+ .data = .{ .ty_op = .{
.ty = try sema.addType(ptr_field_ty),
- .payload = try sema.addExtra(Air.StructField{
- .struct_operand = struct_ptr,
- .field_index = @intCast(u32, field_index),
- }),
+ .operand = struct_ptr,
} },
});
}