aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-09-23 23:06:08 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-09-23 23:06:08 -0700
commita7088fd9a3edb037f0f51bb402a3c557334634f3 (patch)
treedba5fd9f32b341d1cb64b9813033e1558c1e8d2b /src/codegen/c.zig
parent8eff0a0a669dbdacf9cebbc96fdf20536f3073ee (diff)
downloadzig-a7088fd9a3edb037f0f51bb402a3c557334634f3.tar.gz
zig-a7088fd9a3edb037f0f51bb402a3c557334634f3.zip
compiler: packed structs cache bit offsets
Instead of linear search every time a packed struct field's bit or byte offset is wanted, they are computed once during resolution of the packed struct's backing int type, and stored in InternPool for O(1) lookup. Closes #17178
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 54e13db9a1..ff472f7375 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -5429,7 +5429,7 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
const bit_offset_ty = try mod.intType(.unsigned, Type.smallestUnsignedBits(int_info.bits - 1));
- const bit_offset = mod.structPackedFieldBitOffset(struct_type, extra.field_index);
+ const bit_offset = struct_type.fieldBitOffset(ip, extra.field_index);
const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
const field_int_signedness = if (inst_ty.isAbiInt(mod))