authorgravatar for pentuppup@noreply.codeberg.orgpentuppup <pentuppup@noreply.codeberg.org> 2026-09-05 17:51:06-04:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-09-12 16:28:33+02:00
logd84959d9e23799c4688836fbab90d3b9518fe60a
tree7fc74911935abe8745eab3d4b170e52abc848e37
parent2be592bb3ca71621422428ec8874b34a77606013

llvm: use correct access kind when loading bit aligned pointers


2 files changed, 10 insertions(+), 1 deletions(-)

src/codegen/llvm/FuncGen.zig+1-1
......@@ -5220,7 +5220,7 @@ fn airLoad(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
52205220 const backing_int_ty = try fg.pt.intType(.unsigned, @intCast(ptr_info.packed_offset.host_size * 8));
52215221 const llvm_backing_int_ty = try o.lowerType(backing_int_ty, .as_value);
52225222
5223 const backing_int_val = try fg.load(ptr, ptr_align, backing_int_ty, .normal);
5223 const backing_int_val = try fg.load(ptr, ptr_align, backing_int_ty, access_kind);
52245224
52255225 const elem_bits = ptr_ty.childType(zcu).bitSize(zcu);
52265226 const shift_amt = try o.builder.intValue(llvm_backing_int_ty, ptr_info.packed_offset.bit_offset);
test/llvm_ir.zig+9
......@@ -75,6 +75,15 @@ pub fn addCases(cases: *tests.LlvmIrContext) void {
7575 "store volatile i16 321, ptr",
7676 }, .{});
7777
78 cases.addMatches("unused volatile packed pointer load",
79 \\const S = packed struct(u16) { a: u2, b: u8, c: u6 };
80 \\export fn entry(ptr: *volatile S) void {
81 \\ _ = ptr.b;
82 \\}
83 , &.{
84 "load volatile i16, ptr",
85 }, .{});
86
7887 cases.addMatches("allowzero ptr load",
7988 \\export fn entry(ptr: *allowzero i16) i16 {
8089 \\ return ptr.*;