llvm: switch most targets to using half and fp128 IR types

As of LLVM 22, most backends can (finally) handle legalization of these types as
necessary, so we don't need to do it ourselves anymore.

closes https://github.com/ziglang/zig/issues/23674
This commit is contained in:
Alex Rønne Petersen
2026-01-19 20:43:42 +01:00
parent 9e1e54d324
commit 593f45ee02
2 changed files with 1 additions and 41 deletions
+1 -22
View File
@@ -447,29 +447,8 @@ pub const gnu_f16_abi = switch (builtin.cpu.arch) {
pub const want_sparc_abi = builtin.cpu.arch.isSPARC(); pub const want_sparc_abi = builtin.cpu.arch.isSPARC();
/// This seems to mostly correspond to `clang::TargetInfo::HasFloat16`.
pub fn F16T(comptime OtherType: type) type { pub fn F16T(comptime OtherType: type) type {
return switch (builtin.cpu.arch) { return switch (builtin.cpu.arch) {
.amdgcn,
.arm,
.armeb,
.thumb,
.thumbeb,
.aarch64,
.aarch64_be,
.hexagon,
.loongarch32,
.loongarch64,
.nvptx,
.nvptx64,
.riscv32,
.riscv32be,
.riscv64,
.riscv64be,
.s390x,
.spirv32,
.spirv64,
=> f16,
.x86, .x86_64 => if (builtin.target.os.tag.isDarwin()) switch (OtherType) { .x86, .x86_64 => if (builtin.target.os.tag.isDarwin()) switch (OtherType) {
// Starting with LLVM 16, Darwin uses different abi for f16 // Starting with LLVM 16, Darwin uses different abi for f16
// depending on the type of the other return/argument..??? // depending on the type of the other return/argument..???
@@ -477,7 +456,7 @@ pub fn F16T(comptime OtherType: type) type {
f80, f128 => f16, f80, f128 => f16,
else => unreachable, else => unreachable,
} else f16, } else f16,
else => u16, else => f16,
}; };
} }
-19
View File
@@ -4646,20 +4646,6 @@ fn toLlvmGlobalAddressSpace(wanted_address_space: std.builtin.AddressSpace, targ
/// or if it produces miscompilations. /// or if it produces miscompilations.
pub fn backendSupportsF16(target: *const std.Target) bool { pub fn backendSupportsF16(target: *const std.Target) bool {
return switch (target.cpu.arch) { return switch (target.cpu.arch) {
// https://github.com/llvm/llvm-project/issues/97981
.csky,
// https://github.com/llvm/llvm-project/issues/97981
.powerpc,
.powerpcle,
.powerpc64,
.powerpc64le,
// https://github.com/llvm/llvm-project/issues/97981
.wasm32,
.wasm64,
// https://github.com/llvm/llvm-project/issues/97981
.sparc,
.sparc64,
=> false,
.arm, .arm,
.armeb, .armeb,
.thumb, .thumb,
@@ -4686,11 +4672,6 @@ pub fn backendSupportsF128(target: *const std.Target) bool {
return switch (target.cpu.arch) { return switch (target.cpu.arch) {
// https://github.com/llvm/llvm-project/issues/121122 // https://github.com/llvm/llvm-project/issues/121122
.amdgcn, .amdgcn,
// Test failures all over the place.
.mips64,
.mips64el,
// https://github.com/llvm/llvm-project/issues/41838
.sparc,
=> false, => false,
.arm, .arm,
.armeb, .armeb,