authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-06 11:47:35+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-15 19:29:56+02:00
log3550cacd73b40cea5cfe3d9613bb4f80b5d42417
treef65df9bbab2b6a143a846e16036b43b84c1b4ec9
parentd289dba125c128bf03309957fee948fba32b8852
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

llvm: Fix compiler crash when lowering f16 for riscv32 ilp32.


1 files changed, 0 insertions(+), 20 deletions(-)

src/codegen/llvm.zig-20
...@@ -1687,12 +1687,6 @@ pub const Object = struct {...@@ -1687,12 +1687,6 @@ pub const Object = struct {
1687 else1687 else
1688 try wip.load(.normal, param_llvm_ty, arg_ptr, param_alignment, ""));1688 try wip.load(.normal, param_llvm_ty, arg_ptr, param_alignment, ""));
1689 },1689 },
1690 .as_u16 => {
1691 assert(!it.byval_attr);
1692 const param = wip.arg(llvm_arg_i);
1693 llvm_arg_i += 1;
1694 args.appendAssumeCapacity(try wip.cast(.bitcast, param, .half, ""));
1695 },
1696 .float_array => {1690 .float_array => {
1697 const param_ty = Type.fromInterned(fn_info.param_types.get(ip)[it.zig_index - 1]);1691 const param_ty = Type.fromInterned(fn_info.param_types.get(ip)[it.zig_index - 1]);
1698 const param_llvm_ty = try o.lowerType(param_ty);1692 const param_llvm_ty = try o.lowerType(param_ty);
...@@ -3095,7 +3089,6 @@ pub const Object = struct {...@@ -3095,7 +3089,6 @@ pub const Object = struct {
3095 .no_bits,3089 .no_bits,
3096 .abi_sized_int,3090 .abi_sized_int,
3097 .multiple_llvm_types,3091 .multiple_llvm_types,
3098 .as_u16,
3099 .float_array,3092 .float_array,
3100 .i32_array,3093 .i32_array,
3101 .i64_array,3094 .i64_array,
...@@ -3770,9 +3763,6 @@ pub const Object = struct {...@@ -3770,9 +3763,6 @@ pub const Object = struct {
3770 .multiple_llvm_types => {3763 .multiple_llvm_types => {
3771 try llvm_params.appendSlice(o.gpa, it.types_buffer[0..it.types_len]);3764 try llvm_params.appendSlice(o.gpa, it.types_buffer[0..it.types_len]);
3772 },3765 },
3773 .as_u16 => {
3774 try llvm_params.append(o.gpa, .i16);
3775 },
3776 .float_array => |count| {3766 .float_array => |count| {
3777 const param_ty = Type.fromInterned(fn_info.param_types.get(ip)[it.zig_index - 1]);3767 const param_ty = Type.fromInterned(fn_info.param_types.get(ip)[it.zig_index - 1]);
3778 const float_ty = try o.lowerType(aarch64_c_abi.getFloatArrayType(param_ty, zcu).?);3768 const float_ty = try o.lowerType(aarch64_c_abi.getFloatArrayType(param_ty, zcu).?);
...@@ -5587,12 +5577,6 @@ pub const FuncGen = struct {...@@ -5587,12 +5577,6 @@ pub const FuncGen = struct {
5587 llvm_args.appendAssumeCapacity(loaded);5577 llvm_args.appendAssumeCapacity(loaded);
5588 }5578 }
5589 },5579 },
5590 .as_u16 => {
5591 const arg = args[it.zig_index - 1];
5592 const llvm_arg = try self.resolveInst(arg);
5593 const casted = try self.wip.cast(.bitcast, llvm_arg, .i16, "");
5594 try llvm_args.append(casted);
5595 },
5596 .float_array => |count| {5580 .float_array => |count| {
5597 const arg = args[it.zig_index - 1];5581 const arg = args[it.zig_index - 1];
5598 const arg_ty = self.typeOf(arg);5582 const arg_ty = self.typeOf(arg);
...@@ -5654,7 +5638,6 @@ pub const FuncGen = struct {...@@ -5654,7 +5638,6 @@ pub const FuncGen = struct {
5654 .no_bits,5638 .no_bits,
5655 .abi_sized_int,5639 .abi_sized_int,
5656 .multiple_llvm_types,5640 .multiple_llvm_types,
5657 .as_u16,
5658 .float_array,5641 .float_array,
5659 .i32_array,5642 .i32_array,
5660 .i64_array,5643 .i64_array,
...@@ -11968,7 +11951,6 @@ const ParamTypeIterator = struct {...@@ -11968,7 +11951,6 @@ const ParamTypeIterator = struct {
11968 abi_sized_int,11951 abi_sized_int,
11969 multiple_llvm_types,11952 multiple_llvm_types,
11970 slice,11953 slice,
11971 as_u16,
11972 float_array: u8,11954 float_array: u8,
11973 i32_array: u8,11955 i32_array: u8,
11974 i64_array: u8,11956 i64_array: u8,
...@@ -12090,8 +12072,6 @@ const ParamTypeIterator = struct {...@@ -12090,8 +12072,6 @@ const ParamTypeIterator = struct {
12090 .riscv32, .riscv64 => {12072 .riscv32, .riscv64 => {
12091 it.zig_index += 1;12073 it.zig_index += 1;
12092 it.llvm_index += 1;12074 it.llvm_index += 1;
12093 if (ty.toIntern() == .f16_type and
12094 !std.Target.riscv.featureSetHas(target.cpu.features, .d)) return .as_u16;
12095 switch (riscv_c_abi.classifyType(ty, zcu)) {12075 switch (riscv_c_abi.classifyType(ty, zcu)) {
12096 .memory => return .byref_mut,12076 .memory => return .byref_mut,
12097 .byval => return .byval,12077 .byval => return .byval,