about summary refs log tree commit diff
diff options
context:
space:
mode:
authorStuart Cook <Zalathar@users.noreply.github.com>2025-05-04 13:21:07 +1000
committerGitHub <noreply@github.com>2025-05-04 13:21:07 +1000
commited7590f1a0932341f938e34bfb69c72bbc255fcf (patch)
treef01e6e0e835016878f752e1c3cff7a6a6704346d
parent3559e0ab0e370b98bc3f9e6b688152c47eb9e6c8 (diff)
parent163fb854a2346a26ade9e09ec13ef10a3145ee25 (diff)
downloadrust-ed7590f1a0932341f938e34bfb69c72bbc255fcf.tar.gz
rust-ed7590f1a0932341f938e34bfb69c72bbc255fcf.zip
Rollup merge of #139675 - sayantn:avx10, r=Amanieu
Add the AVX10 target features

Parent #138843

Adds the `avx10_target_feature` feature gate, and `avx10.1` and `avx10.2` target features.

It is confirmed that Intel is dropping AVX10/256 (see [this comment](https://github.com/rust-lang/rust/issues/111137#issuecomment-2795442288)), so this should be safe to implement now.

The LLVM fix for llvm/llvm-project#135394 was merged, and has been backported to LLVM20, and the patch has also been propagated to rustc in #140502

`@rustbot` label O-x86_64 O-x86_32 A-target-feature A-SIMD
-rw-r--r--compiler/rustc_codegen_llvm/src/llvm_util.rs3
-rw-r--r--compiler/rustc_feature/src/unstable.rs2
-rw-r--r--compiler/rustc_span/src/symbol.rs1
-rw-r--r--compiler/rustc_target/src/target_features.rs20
-rw-r--r--tests/ui/check-cfg/and-more-diagnostic.rs2
-rw-r--r--tests/ui/check-cfg/target_feature.stderr2
-rw-r--r--tests/ui/feature-gates/feature-gate-avx10_target_feature.rs6
-rw-r--r--tests/ui/feature-gates/feature-gate-avx10_target_feature.stderr13
8 files changed, 48 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs
index 507cbf20d89..264510285a5 100644
--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs
@@ -301,6 +301,9 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
             None
         }
         ("x86", "movrs") if get_version().0 < 20 => None,
+        ("x86", "avx10.1") => Some(LLVMFeature::new("avx10.1-512")),
+        ("x86", "avx10.2") if get_version().0 < 20 => None,
+        ("x86", "avx10.2") if get_version().0 >= 20 => Some(LLVMFeature::new("avx10.2-512")),
         (_, s) => Some(LLVMFeature::new(s)),
     }
 }
diff --git a/compiler/rustc_feature/src/unstable.rs b/compiler/rustc_feature/src/unstable.rs
index 75e09cacb1f..1a011dfff3f 100644
--- a/compiler/rustc_feature/src/unstable.rs
+++ b/compiler/rustc_feature/src/unstable.rs
@@ -393,6 +393,8 @@ declare_features! (
     (unstable, async_for_loop, "1.77.0", Some(118898)),
     /// Allows `async` trait bound modifier.
     (unstable, async_trait_bounds, "1.85.0", Some(62290)),
+    /// Allows using Intel AVX10 target features and intrinsics
+    (unstable, avx10_target_feature, "CURRENT_RUSTC_VERSION", Some(138843)),
     /// Allows using C-variadics.
     (unstable, c_variadic, "1.34.0", Some(44930)),
     /// Allows the use of `#[cfg(contract_checks)` to check if contract checks are enabled.
diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs
index 7a1fb36324b..3912c7dc7d6 100644
--- a/compiler/rustc_span/src/symbol.rs
+++ b/compiler/rustc_span/src/symbol.rs
@@ -531,6 +531,7 @@ symbols! {
         autodiff,
         automatically_derived,
         avx,
+        avx10_target_feature,
         avx512_target_feature,
         avx512bw,
         avx512f,
diff --git a/compiler/rustc_target/src/target_features.rs b/compiler/rustc_target/src/target_features.rs
index f856d3efc1c..d04c8f3f2eb 100644
--- a/compiler/rustc_target/src/target_features.rs
+++ b/compiler/rustc_target/src/target_features.rs
@@ -394,6 +394,26 @@ static X86_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
     ("amx-tile", Unstable(sym::x86_amx_intrinsics), &[]),
     ("amx-transpose", Unstable(sym::x86_amx_intrinsics), &["amx-tile"]),
     ("avx", Stable, &["sse4.2"]),
+    (
+        "avx10.1",
+        Unstable(sym::avx10_target_feature),
+        &[
+            "avx512bf16",
+            "avx512bitalg",
+            "avx512bw",
+            "avx512cd",
+            "avx512dq",
+            "avx512f",
+            "avx512fp16",
+            "avx512ifma",
+            "avx512vbmi",
+            "avx512vbmi2",
+            "avx512vl",
+            "avx512vnni",
+            "avx512vpopcntdq",
+        ],
+    ),
+    ("avx10.2", Unstable(sym::avx10_target_feature), &["avx10.1"]),
     ("avx2", Stable, &["avx"]),
     ("avx512bf16", Unstable(sym::avx512_target_feature), &["avx512bw"]),
     ("avx512bitalg", Unstable(sym::avx512_target_feature), &["avx512bw"]),
diff --git a/tests/ui/check-cfg/and-more-diagnostic.rs b/tests/ui/check-cfg/and-more-diagnostic.rs
index 977f55e8a6d..5422829c5b3 100644
--- a/tests/ui/check-cfg/and-more-diagnostic.rs
+++ b/tests/ui/check-cfg/and-more-diagnostic.rs
@@ -5,7 +5,7 @@
 //@ no-auto-check-cfg
 //@ compile-flags: --check-cfg=cfg()
 //@ normalize-stderr: "and \d+ more" -> "and X more"
-//@ normalize-stderr: "`[a-zA-Z0-9_-]+`" -> "`xxx`"
+//@ normalize-stderr: "`[a-zA-Z0-9_\.-]+`" -> "`xxx`"
 
 fn main() {
     cfg!(target_feature = "zebra");
diff --git a/tests/ui/check-cfg/target_feature.stderr b/tests/ui/check-cfg/target_feature.stderr
index 712ce941c54..3d7323298ba 100644
--- a/tests/ui/check-cfg/target_feature.stderr
+++ b/tests/ui/check-cfg/target_feature.stderr
@@ -29,6 +29,8 @@ LL |     cfg!(target_feature = "_UNEXPECTED_VALUE");
 `amx-transpose`
 `atomics`
 `avx`
+`avx10.1`
+`avx10.2`
 `avx2`
 `avx512bf16`
 `avx512bitalg`
diff --git a/tests/ui/feature-gates/feature-gate-avx10_target_feature.rs b/tests/ui/feature-gates/feature-gate-avx10_target_feature.rs
new file mode 100644
index 00000000000..8557e67d1f4
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-avx10_target_feature.rs
@@ -0,0 +1,6 @@
+//@ only-x86_64
+#[target_feature(enable = "avx10.1")]
+//~^ ERROR: currently unstable
+unsafe fn foo() {}
+
+fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-avx10_target_feature.stderr b/tests/ui/feature-gates/feature-gate-avx10_target_feature.stderr
new file mode 100644
index 00000000000..e45ea3524ca
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-avx10_target_feature.stderr
@@ -0,0 +1,13 @@
+error[E0658]: the target feature `avx10.1` is currently unstable
+  --> $DIR/feature-gate-avx10_target_feature.rs:2:18
+   |
+LL | #[target_feature(enable = "avx10.1")]
+   |                  ^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #138843 <https://github.com/rust-lang/rust/issues/138843> for more information
+   = help: add `#![feature(avx10_target_feature)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0658`.