From a27f4072eca2673511371b7977d2b07cf6fabf69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Fri, 23 Aug 2024 19:32:31 +0200 Subject: [PATCH] llvm: Stop emitting shl/xor ops for constant packed structs. This is no longer supported in LLVM 19; fall back to the generic code path. --- src/codegen/llvm.zig | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index ec2ba4e4c1..3674d65b5d 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -3761,28 +3761,7 @@ pub const Object = struct { }, .ptr => return o.builder.convConst(try o.lowerPtr(arg_val, 0), llvm_int_ty), .aggregate => switch (ip.indexToKey(ty.toIntern())) { - .struct_type => { - const struct_type = ip.loadStructType(ty.toIntern()); - assert(struct_type.haveLayout(ip)); - assert(struct_type.layout == .@"packed"); - comptime assert(Type.packed_struct_layout_version == 2); - var running_int = try o.builder.intConst(llvm_int_ty, 0); - var running_bits: u16 = 0; - for (struct_type.field_types.get(ip), 0..) |field_ty, field_index| { - if (!Type.fromInterned(field_ty).hasRuntimeBitsIgnoreComptime(zcu)) continue; - - const shift_rhs = try o.builder.intConst(llvm_int_ty, running_bits); - const field_val = try o.lowerValueToInt(llvm_int_ty, (try val.fieldValue(pt, field_index)).toIntern()); - const shifted = try o.builder.binConst(.shl, field_val, shift_rhs); - - running_int = try o.builder.binConst(.xor, running_int, shifted); - - const ty_bit_size: u16 = @intCast(Type.fromInterned(field_ty).bitSize(zcu)); - running_bits += ty_bit_size; - } - return running_int; - }, - .vector_type => {}, + .struct_type, .vector_type => {}, else => unreachable, }, .un => |un| {