diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs index 8461c8b03d5a4..25a123b10f5de 100644 --- a/compiler/rustc_codegen_llvm/src/llvm_util.rs +++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs @@ -335,25 +335,25 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) { let target_abi = sess.target.options.abi.as_ref(); let target_pointer_width = sess.target.pointer_width; let version = get_version(); - let lt_20_1_1 = version < (20, 1, 1); - let lt_21_0_0 = version < (21, 0, 0); + let (major, _, _) = version; cfg.has_reliable_f16 = match (target_arch, target_os) { - // LLVM crash without neon (fixed in llvm20) + // LLVM crash without neon (fixed in LLVM 20.1.1) ("aarch64", _) - if !cfg.target_features.iter().any(|f| f.as_str() == "neon") && lt_20_1_1 => + if !cfg.target_features.iter().any(|f| f.as_str() == "neon") + && version < (20, 1, 1) => { false } // Unsupported ("arm64ec", _) => false, // Selection failure (fixed in llvm21) - ("s390x", _) if lt_21_0_0 => false, + ("s390x", _) if major < 21 => false, // MinGW ABI bugs ("x86_64", "windows") if target_env == "gnu" && target_abi != "llvm" => false, // Infinite recursion ("csky", _) => false, - ("hexagon", _) if lt_21_0_0 => false, // (fixed in llvm21) + ("hexagon", _) if major < 21 => false, // (fixed in llvm21) ("powerpc" | "powerpc64", _) => false, ("sparc" | "sparc64", _) => false, ("wasm32" | "wasm64", _) => false, @@ -364,15 +364,13 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) { }; cfg.has_reliable_f128 = match (target_arch, target_os) { + // Unsupported https://github.com/llvm/llvm-project/issues/121122 + ("amdgpu", _) => false, // Unsupported ("arm64ec", _) => false, - // Selection bug (fixed in llvm20) - ("mips64" | "mips64r6", _) if lt_20_1_1 => false, // Selection bug . This issue is closed // but basic math still does not work. ("nvptx64", _) => false, - // Unsupported https://github.com/llvm/llvm-project/issues/121122 - ("amdgpu", _) => false, // ABI bugs et al. (full // list at ) ("powerpc" | "powerpc64", _) => false, @@ -380,7 +378,7 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) { ("sparc", _) => false, // Stack alignment bug . NB: tests may // not fail if our compiler-builtins is linked. (fixed in llvm21) - ("x86", _) if lt_21_0_0 => false, + ("x86", _) if major < 21 => false, // MinGW ABI bugs ("x86_64", "windows") if target_env == "gnu" && target_abi != "llvm" => false, // There are no known problems on other platforms, so the only requirement is that symbols