rustc_codegen_llvm: Simplify update_target_reliable_float_cfg
This commit simplifies floating type handling through
`update_target_reliable_float_cfg` based on several facts:
1. Major changes in behavior normally occurs only
on the major LLVM upgrade.
2. The first release of LLVM 20.x.x is 20.1.0.
Due to the first fact, we can normally ignore minor and patch releases
of LLVM and we can remove obscure variables like `lt_xx_x_x` (still,
there is a case where checking for patch version is required).
The second fact is missed when the minimum LLVM version is raised to
LLVM 20 and one "fixed in LLVM 20" case can be safely removed.
This commit is contained in:
parent
572ca1eb74
commit
28203e182f
1 changed files with 7 additions and 8 deletions
|
|
@ -364,26 +364,25 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
|||
let target_abi = &sess.target.options.abi;
|
||||
let target_pointer_width = sess.target.pointer_width;
|
||||
let version = get_version();
|
||||
let lt_20_1_0 = version < (20, 1, 0);
|
||||
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 <https://github.com/llvm/llvm-project/issues/129394> (fixed in LLVM 20.1.1)
|
||||
(Arch::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 <https://github.com/llvm/llvm-project/issues/94434>
|
||||
(Arch::Arm64EC, _) => false,
|
||||
// Selection failure <https://github.com/llvm/llvm-project/issues/50374> (fixed in llvm21)
|
||||
(Arch::S390x, _) if lt_21_0_0 => false,
|
||||
(Arch::S390x, _) if major < 21 => false,
|
||||
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != Abi::Llvm => false,
|
||||
// Infinite recursion <https://github.com/llvm/llvm-project/issues/97981>
|
||||
(Arch::CSky, _) => false,
|
||||
(Arch::Hexagon, _) if lt_21_0_0 => false, // (fixed in llvm21)
|
||||
(Arch::Hexagon, _) if major < 21 => false, // (fixed in llvm21)
|
||||
(Arch::PowerPC | Arch::PowerPC64, _) => false,
|
||||
(Arch::Sparc | Arch::Sparc64, _) => false,
|
||||
(Arch::Wasm32 | Arch::Wasm64, _) => false,
|
||||
|
|
@ -397,7 +396,7 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
|||
// Unsupported <https://github.com/llvm/llvm-project/issues/94434>
|
||||
(Arch::Arm64EC, _) => false,
|
||||
// Selection bug <https://github.com/llvm/llvm-project/issues/96432> (fixed in LLVM 20.1.0)
|
||||
(Arch::Mips64 | Arch::Mips64r6, _) if lt_20_1_0 => false,
|
||||
(Arch::Mips64 | Arch::Mips64r6, _) if version < (20, 1, 0) => false,
|
||||
// Selection bug <https://github.com/llvm/llvm-project/issues/95471>. This issue is closed
|
||||
// but basic math still does not work.
|
||||
(Arch::Nvptx64, _) => false,
|
||||
|
|
@ -410,7 +409,7 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
|||
(Arch::Sparc, _) => false,
|
||||
// Stack alignment bug <https://github.com/llvm/llvm-project/issues/77401>. NB: tests may
|
||||
// not fail if our compiler-builtins is linked. (fixed in llvm21)
|
||||
(Arch::X86, _) if lt_21_0_0 => false,
|
||||
(Arch::X86, _) if major < 21 => false,
|
||||
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>
|
||||
(Arch::X86_64, Os::Windows) if *target_env == Env::Gnu && *target_abi != Abi::Llvm => false,
|
||||
// There are no known problems on other platforms, so the only requirement is that symbols
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue