cleanup: remove support for 3DNow! cpu features by durin42 · Pull Request #127864 · rust-lang/rust (original) (raw)

durin42

In llvm/llvm-project@f0eb558 all support for 3DNow! intrinsics and instructions were removed. Per the commit message there, only AMD chips between 1998 and 2011 or so actually supported these instructions, and they were effectively replaced by SSE which was available on many more chips. I'd be very surprised if anyone had ever used these from Rust.

@rustbot label: +llvm-main

@rustbot

r? @wesleywiser

rustbot has assigned @wesleywiser.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-compiler

Relevant to the compiler team, which will review and decide on the PR/issue.

llvm-main

Marks PRs that are making Rust work with LLVM main (this label is consumed by CI tooling)

labels

Jul 17, 2024

@rust-log-analyzer

This comment has been minimized.

@mati865

I think you are missing "were removed" or something like that in the first sentence of the description (and commit message).

@durin42

I think you are missing "were removed" or something like that in the first sentence of the description (and commit message).

whoops, good catch. Thanks!

antoyo

@@ -7210,29 +7210,6 @@ match name {
"llvm.ve.vl.xorm.MMM" => "__builtin_ve_vl_xorm_MMM",
"llvm.ve.vl.xorm.mmm" => "__builtin_ve_vl_xorm_mmm",
// x86
"llvm.x86.3dnow.pavgusb" => "__builtin_ia32_pavgusb",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is auto-generated, so it doesn't make sense to remove these.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shucks, just noticed it's in the GCC backend too. I'll undo that.

@compiler-errors

You should squash this so the commit history still doesn't touch an autogenerated file (twice)

@durin42

In llvm/llvm-project@f0eb558 all support for 3DNow! intrinsics and instructions were removed. Per the commit message there, only AMD chips between 1998 and 2011 or so actually supported these instructions, and they were effectively replaced by SSE which was available on many more chips. I'd be very surprised if anyone had ever used these from Rust.

@nikic

@bors

📌 Commit 72e2255 has been approved by nikic

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

labels

Jul 18, 2024

@nikic

bors added a commit to rust-lang-ci/rust that referenced this pull request

Jul 18, 2024

@bors

Rollup of 7 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Jul 18, 2024

@rust-timer

Rollup merge of rust-lang#127864 - durin42:farewell-3dnow, r=nikic

cleanup: remove support for 3DNow! cpu features

In llvm/llvm-project@f0eb558 all support for 3DNow! intrinsics and instructions were removed. Per the commit message there, only AMD chips between 1998 and 2011 or so actually supported these instructions, and they were effectively replaced by SSE which was available on many more chips. I'd be very surprised if anyone had ever used these from Rust.

@rustbot label: +llvm-main

@ojeda ojeda mentioned this pull request

Aug 5, 2024

ojeda added a commit to ojeda/linux that referenced this pull request

Aug 6, 2024

@ojeda

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: Rust-for-Linux#1094 Signed-off-by: Miguel Ojeda ojeda@kernel.org

intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this pull request

Aug 6, 2024

@ojeda @intel-lab-lkp

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: Rust-for-Linux#1094 Signed-off-by: Miguel Ojeda ojeda@kernel.org

fbq pushed a commit to Rust-for-Linux/linux that referenced this pull request

Aug 6, 2024

@ojeda @fbq

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: #1094 Signed-off-by: Miguel Ojeda ojeda@kernel.org Tested-by: Benno Lossin benno.lossin@proton.me Link: https://lore.kernel.org/r/20240806144558.114461-1-ojeda@kernel.org

ojeda added a commit to Rust-for-Linux/linux that referenced this pull request

Aug 9, 2024

@ojeda

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: #1094 Tested-by: Benno Lossin benno.lossin@proton.me Tested-by: Alice Ryhl aliceryhl@google.com Link: https://lore.kernel.org/r/20240806144558.114461-1-ojeda@kernel.org Signed-off-by: Miguel Ojeda ojeda@kernel.org

ojeda added a commit to Rust-for-Linux/linux that referenced this pull request

Aug 9, 2024

@ojeda

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: #1094 Tested-by: Benno Lossin benno.lossin@proton.me Tested-by: Alice Ryhl aliceryhl@google.com Link: https://lore.kernel.org/r/20240806144558.114461-1-ojeda@kernel.org Signed-off-by: Miguel Ojeda ojeda@kernel.org

Mr-Bossman pushed a commit to Mr-Bossman/linux that referenced this pull request

Sep 16, 2024

@ojeda @Mr-Bossman

LLVM 19 is dropping support for 3DNow! in commit f0eb5587ceeb ("Remove support for 3DNow!, both intrinsics and builtins. (#96246)"):

Remove support for 3DNow!, both intrinsics and builtins. (#96246)

This set of instructions was only supported by AMD chips starting in
the K6-2 (introduced 1998), and before the "Bulldozer" family
(2011). They were never much used, as they were effectively superseded
by the more-widely-implemented SSE (first implemented on the AMD side
in Athlon XP in 2001).

This is being done as a predecessor towards general removal of MMX
register usage. Since there is almost no usage of the 3DNow!
intrinsics, and no modern hardware even implements them, simple
removal seems like the best option.

Thus we should avoid passing these to the backend, since otherwise we get a diagnostic about it:

'-3dnow' is not a recognized feature for this target (ignoring feature)
'-3dnowa' is not a recognized feature for this target (ignoring feature)

We could try to disable them only up to LLVM 19 (not the C side one, but the one used by rustc, which may be built with a range of LLVMs). However, to avoid more complexity, we can likely just remove them altogether. According to Nikita [2]:

I don't think it's needed because LLVM should not generate 3dnow instructions unless specifically asked to, using intrinsics that Rust does not provide in the first place.

Thus do so, like Rust did for one of their builtin targets [3].

For those curious: Clang will warn only about trying to enable them (-m3dnow{,a}), but not about disabling them (-mno-3dnow{,a}), so there is no change needed there.

Cc: Nikita Popov github@npopov.com Cc: Nathan Chancellor nathan@kernel.org Cc: x86@kernel.org Link: llvm/llvm-project@f0eb558 [1] Link: rust-lang/rust#127864 (comment) [2] Link: rust-lang/rust#127864 [3] Closes: Rust-for-Linux#1094 Tested-by: Benno Lossin benno.lossin@proton.me Tested-by: Alice Ryhl aliceryhl@google.com Link: https://lore.kernel.org/r/20240806144558.114461-1-ojeda@kernel.org Signed-off-by: Miguel Ojeda ojeda@kernel.org