diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-09-23 23:06:08 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-09-23 23:06:08 -0700 |
| commit | a7088fd9a3edb037f0f51bb402a3c557334634f3 (patch) | |
| tree | dba5fd9f32b341d1cb64b9813033e1558c1e8d2b /src/codegen/c.zig | |
| parent | 8eff0a0a669dbdacf9cebbc96fdf20536f3073ee (diff) | |
| download | zig-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.zig | 2 |
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)) |
