[clang] [llvm] [LLVM][AArch64] Relax SVE/SME codegen predicates for crypto and bitperm instructions. (PR #145696)
Paul Walker via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 25 06:04:03 PDT 2025
https://github.com/paulwalker-arm created https://github.com/llvm/llvm-project/pull/145696
Adds sve-sha3 to reference FEAT_SVE_SHA3 without specifically enabling SVE2. The SVE2 requirement for AES, SHA3 and Bitperm is replaced with SVE for non-streaming function.
>From 565d4f767f2abee3d62690016098360b2eb02d75 Mon Sep 17 00:00:00 2001
From: Paul Walker <paul.walker at arm.com>
Date: Tue, 24 Jun 2025 14:46:07 +0100
Subject: [PATCH] [LLVM][AArch64] Relax SVE/SME codegen predicates for crypto
and bitperm.
Adds sve-sha3 to reference FEAT_SVE_SHA3 without specifically enabling
SVE2. The SVE2 requirement for AES, SHA3 and Bitperm is replaced with
SVE for non-streaming function.
---
clang/test/CodeGen/AArch64/fmv-dependencies.c | 2 +-
.../Driver/aarch64-implied-sve-features.c | 4 +--
.../aarch64-fujitsu-monaka.c | 2 +-
.../print-enabled-extensions/aarch64-grace.c | 2 +-
.../aarch64-olympus.c | 2 +-
.../print-supported-extensions-aarch64.c | 3 +-
llvm/lib/Target/AArch64/AArch64.td | 6 ++--
llvm/lib/Target/AArch64/AArch64Features.td | 7 +++--
llvm/lib/Target/AArch64/AArch64InstrInfo.td | 29 +++++++++++--------
llvm/lib/Target/AArch64/AArch64Processors.td | 6 ++--
.../lib/Target/AArch64/AArch64SVEInstrInfo.td | 10 +++----
.../AArch64/AsmParser/AArch64AsmParser.cpp | 3 +-
llvm/lib/TargetParser/AArch64TargetParser.cpp | 7 +++++
.../sve2-intrinsics-bit-permutation.ll | 5 +++-
.../CodeGen/AArch64/sve2-intrinsics-crypto.ll | 4 ++-
.../CodeGen/AArch64/sve2-intrinsics-rax1.ll | 2 ++
.../directive-arch_extension-negative.s | 2 +-
llvm/test/MC/AArch64/SVE2/aesd.s | 2 +-
llvm/test/MC/AArch64/SVE2/aese.s | 2 +-
llvm/test/MC/AArch64/SVE2/aesimc.s | 4 +--
llvm/test/MC/AArch64/SVE2/aesmc.s | 4 +--
llvm/test/MC/AArch64/SVE2/bdep.s | 8 ++---
llvm/test/MC/AArch64/SVE2/bext.s | 8 ++---
llvm/test/MC/AArch64/SVE2/bgrp.s | 8 ++---
.../MC/AArch64/SVE2/directive-arch-negative.s | 2 +-
.../SVE2/directive-arch_extension-negative.s | 12 ++------
.../MC/AArch64/SVE2/directive-cpu-negative.s | 6 ++--
llvm/test/MC/AArch64/SVE2/pmullb-128.s | 2 +-
llvm/test/MC/AArch64/SVE2/pmullt-128.s | 2 +-
llvm/test/MC/AArch64/SVE2/rax1.s | 6 +++-
llvm/test/MC/AArch64/SVE2p1/aesd.s | 12 ++++----
llvm/test/MC/AArch64/SVE2p1/aesdimc.s | 12 ++++----
llvm/test/MC/AArch64/SVE2p1/aese.s | 12 ++++----
llvm/test/MC/AArch64/SVE2p1/aesemc.s | 12 ++++----
llvm/test/MC/AArch64/SVE2p1/pmlal.s | 6 ++--
llvm/test/MC/AArch64/SVE2p1/pmull.s | 6 ++--
.../TargetParser/TargetParserTest.cpp | 10 ++++++-
37 files changed, 131 insertions(+), 101 deletions(-)
diff --git a/clang/test/CodeGen/AArch64/fmv-dependencies.c b/clang/test/CodeGen/AArch64/fmv-dependencies.c
index 7aaf143f2afc5..a97c4e95cd032 100644
--- a/clang/test/CodeGen/AArch64/fmv-dependencies.c
+++ b/clang/test/CodeGen/AArch64/fmv-dependencies.c
@@ -188,7 +188,7 @@ int caller() {
// CHECK: attributes #[[sve2]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sve,+sve2,+v8a"
// CHECK: attributes #[[sve2_aes]] = { {{.*}} "target-features"="+aes,+fp-armv8,+fullfp16,+neon,+outline-atomics,+sve,+sve-aes,+sve2,+sve2-aes,+v8a"
// CHECK: attributes #[[sve2_bitperm]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sve,+sve-bitperm,+sve2,+sve2-bitperm,+v8a"
-// CHECK: attributes #[[sve2_sha3]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sha2,+sha3,+sve,+sve2,+sve2-sha3,+v8a"
+// CHECK: attributes #[[sve2_sha3]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sha2,+sha3,+sve,+sve-sha3,+sve2,+sve2-sha3,+v8a"
// CHECK: attributes #[[sve2_sm4]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sm4,+sve,+sve2,+sve2-sm4,+v8a"
// CHECK: attributes #[[wfxt]] = { {{.*}} "target-features"="+fp-armv8,+neon,+outline-atomics,+v8a,+wfxt"
// CHECK: attributes #[[cssc]] = { {{.*}} "target-features"="+cssc,+fp-armv8,+neon,+outline-atomics,+v8a"
diff --git a/clang/test/Driver/aarch64-implied-sve-features.c b/clang/test/Driver/aarch64-implied-sve-features.c
index ecc1e9500b667..18c39974a5c14 100644
--- a/clang/test/Driver/aarch64-implied-sve-features.c
+++ b/clang/test/Driver/aarch64-implied-sve-features.c
@@ -46,13 +46,13 @@
// SVE2-AES-REVERT: "-target-feature" "+sve" "-target-feature" "-sve-aes" "-target-feature" "+sve2" "-target-feature" "-sve2-aes"
// RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-sha3+nosve2-sha3 %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SHA3-REVERT
-// SVE2-SHA3-REVERT: "-target-feature" "+sve" "-target-feature" "+sve2" "-target-feature" "-sve2-sha3"
+// SVE2-SHA3-REVERT: "-target-feature" "+sve" "-target-feature" "-sve-sha3" "-target-feature" "+sve2" "-target-feature" "-sve2-sha3"
// RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-sm4+nosve2-sm4 %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SM4-REVERT
// SVE2-SM4-REVERT: "-target-feature" "+sve" "-target-feature" "+sve2" "-target-feature" "-sve2-sm4"
// RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-sha3 %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SHA3
-// SVE2-SHA3: "-target-feature" "+sve" "-target-feature" "+sve2" "-target-feature" "+sve2-sha3"
+// SVE2-SHA3: "-target-feature" "+sve" "-target-feature" "+sve-sha3" "-target-feature" "+sve2" "-target-feature" "+sve2-sha3"
// RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve-aes %s -### 2>&1 | FileCheck %s --check-prefix=SVE-AES
// SVE-AES: "-target-feature" "+aes"{{.*}} "-target-feature" "+sve-aes"
diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c b/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c
index 29e9682d58700..8576edff9bcbe 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c
@@ -70,7 +70,7 @@
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
// CHECK-NEXT: FEAT_SVE_AES, FEAT_SVE_PMULL128 Enable SVE AES and quadword SVE polynomial multiply instructions
// CHECK-NEXT: FEAT_SVE_BitPerm Enable bit permutation SVE2 instructions
-// CHECK-NEXT: FEAT_SVE_SHA3 Enable SHA3 SVE2 instructions
+// CHECK-NEXT: FEAT_SVE_SHA3 Enable SVE SHA3 instructions
// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension
diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c
index 739d86f1fae0f..bb24dfbbc0702 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c
@@ -54,7 +54,7 @@
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
// CHECK-NEXT: FEAT_SVE_AES, FEAT_SVE_PMULL128 Enable SVE AES and quadword SVE polynomial multiply instructions
// CHECK-NEXT: FEAT_SVE_BitPerm Enable bit permutation SVE2 instructions
-// CHECK-NEXT: FEAT_SVE_SHA3 Enable SHA3 SVE2 instructions
+// CHECK-NEXT: FEAT_SVE_SHA3 Enable SVE SHA3 instructions
// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension
diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c b/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c
index 64106e583d5f8..0cfb9e1fb9817 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c
@@ -70,7 +70,7 @@
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
// CHECK-NEXT: FEAT_SVE_AES, FEAT_SVE_PMULL128 Enable SVE AES and quadword SVE polynomial multiply instructions
// CHECK-NEXT: FEAT_SVE_BitPerm Enable bit permutation SVE2 instructions
-// CHECK-NEXT: FEAT_SVE_SHA3 Enable SHA3 SVE2 instructions
+// CHECK-NEXT: FEAT_SVE_SHA3 Enable SVE SHA3 instructions
// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension
diff --git a/clang/test/Driver/print-supported-extensions-aarch64.c b/clang/test/Driver/print-supported-extensions-aarch64.c
index 539c1937a9712..af4db9944c2df 100644
--- a/clang/test/Driver/print-supported-extensions-aarch64.c
+++ b/clang/test/Driver/print-supported-extensions-aarch64.c
@@ -92,10 +92,11 @@
// CHECK-NEXT: sve-bfscale FEAT_SVE_BFSCALE Enable Armv9.6-A SVE BFloat16 scaling instructions
// CHECK-NEXT: sve-bitperm FEAT_SVE_BitPerm Enable bit permutation SVE2 instructions
// CHECK-NEXT: sve-f16f32mm FEAT_SVE_F16F32MM Enable Armv9.6-A FP16 to FP32 Matrix Multiply
+// CHECK-NEXT: sve-sha3 FEAT_SVE_SHA3 Enable SVE SHA3 instructions
// CHECK-NEXT: sve2 FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
// CHECK-NEXT: sve2-aes Shorthand for +sve2+sve-aes
// CHECK-NEXT: sve2-bitperm Shorthand for +sve2+sve-bitperm
-// CHECK-NEXT: sve2-sha3 FEAT_SVE_SHA3 Enable SHA3 SVE2 instructions
+// CHECK-NEXT: sve2-sha3 Shorthand for +sve2+sve-sha3
// CHECK-NEXT: sve2-sm4 FEAT_SVE_SM4 Enable SM4 SVE2 instructions
// CHECK-NEXT: sve2p1 FEAT_SVE2p1 Enable Scalable Vector Extension 2.1 instructions
// CHECK-NEXT: sve2p2 FEAT_SVE2p2 Enable Armv9.6-A Scalable Vector Extension 2.2 instructions
diff --git a/llvm/lib/Target/AArch64/AArch64.td b/llvm/lib/Target/AArch64/AArch64.td
index eb5a5199b8951..aa2a177d88c5b 100644
--- a/llvm/lib/Target/AArch64/AArch64.td
+++ b/llvm/lib/Target/AArch64/AArch64.td
@@ -63,7 +63,7 @@ def SVE2p1Unsupported : AArch64Unsupported;
def SVE2Unsupported : AArch64Unsupported {
let F = !listconcat([HasSVE2, HasSVE2_or_SME, HasSVE2_or_SME2, HasSSVE_FP8FMA, HasSMEF8F16,
- HasSMEF8F32, HasSVEAES, HasSVE2SHA3, HasSVE2SM4, HasSVEBitPerm,
+ HasSMEF8F32, HasSVEAES, HasSVESHA3, HasSVE2SM4, HasSVEBitPerm,
HasSVEB16B16],
SVE2p1Unsupported.F);
}
@@ -80,14 +80,14 @@ def SME2p2Unsupported : AArch64Unsupported;
def SME2p1Unsupported : AArch64Unsupported {
let F = !listconcat([HasSME2p1, HasSVE2p1_or_SME2p1,
HasSME_MOP4, HasSME_TMOP, HasNonStreamingSVE_or_SSVE_FEXPA,
- HasNonStreamingSVE2_or_SSVE_BitPerm],
+ HasNonStreamingSVE_or_SSVE_BitPerm],
SME2p2Unsupported.F);
}
def SME2Unsupported : AArch64Unsupported {
let F = !listconcat([HasSME2, HasSVE2_or_SME2, HasSVE2p1_or_SME2, HasSSVE_FP8FMA,
HasSMEF8F16, HasSMEF8F32, HasSMEF16F16_or_SMEF8F16, HasSMEB16B16,
- HasNonStreamingSVE2_or_SSVE_AES],
+ HasNonStreamingSVE_or_SSVE_AES],
SME2p1Unsupported.F);
}
diff --git a/llvm/lib/Target/AArch64/AArch64Features.td b/llvm/lib/Target/AArch64/AArch64Features.td
index 469c76752c78c..538a142118a89 100644
--- a/llvm/lib/Target/AArch64/AArch64Features.td
+++ b/llvm/lib/Target/AArch64/AArch64Features.td
@@ -373,8 +373,11 @@ def FeatureAliasSVE2AES : ExtensionWithMArch<"sve2-aes", "SVE2AES",
def FeatureSVE2SM4 : ExtensionWithMArch<"sve2-sm4", "SVE2SM4", "FEAT_SVE_SM4",
"Enable SM4 SVE2 instructions", [FeatureSVE2, FeatureSM4]>;
-def FeatureSVE2SHA3 : ExtensionWithMArch<"sve2-sha3", "SVE2SHA3", "FEAT_SVE_SHA3",
- "Enable SHA3 SVE2 instructions", [FeatureSVE2, FeatureSHA3]>;
+def FeatureSVESHA3 : ExtensionWithMArch<"sve-sha3", "SVESHA3", "FEAT_SVE_SHA3",
+ "Enable SVE SHA3 instructions", [FeatureSHA3]>;
+
+def FeatureAliasSVE2SHA3 : ExtensionWithMArch<"sve2-sha3", "SVE2SHA3",
+ "", "Shorthand for +sve2+sve-sha3", [FeatureSVE2, FeatureSVESHA3]>;
def FeatureSVEBitPerm : ExtensionWithMArch<"sve-bitperm", "SVEBitPerm",
"FEAT_SVE_BitPerm", "Enable bit permutation SVE2 instructions">;
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index 0f3f24f0853c9..f01b634f44ba6 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -153,8 +153,8 @@ def HasSVEAES : Predicate<"Subtarget->hasSVEAES()">,
AssemblerPredicateWithAll<(all_of FeatureSVEAES), "sve-aes">;
def HasSVE2SM4 : Predicate<"Subtarget->isSVEAvailable() && Subtarget->hasSVE2SM4()">,
AssemblerPredicateWithAll<(all_of FeatureSVE2SM4), "sve2-sm4">;
-def HasSVE2SHA3 : Predicate<"Subtarget->isSVEAvailable() && Subtarget->hasSVE2SHA3()">,
- AssemblerPredicateWithAll<(all_of FeatureSVE2SHA3), "sve2-sha3">;
+def HasSVESHA3 : Predicate<"Subtarget->hasSVESHA3()">,
+ AssemblerPredicateWithAll<(all_of FeatureSVESHA3), "sve-sha3">;
def HasSVEBitPerm : Predicate<"Subtarget->hasSVEBitPerm()">,
AssemblerPredicateWithAll<(all_of FeatureSVEBitPerm), "sve-bitperm">;
def HasSMEandIsNonStreamingSafe
@@ -248,11 +248,26 @@ def HasSVE_or_SME
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable()">,
AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSME),
"sve or sme">;
+def HasNonStreamingSVE_or_SME2p1
+ : Predicate<"Subtarget->isSVEAvailable() ||"
+ "(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSME2p1())">,
+ AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSME2p1),
+ "sve or sme2p1">;
def HasNonStreamingSVE_or_SME2p2
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE()) ||"
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSME2p2())">,
AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSME2p2),
"sve or sme2p2">;
+def HasNonStreamingSVE_or_SSVE_AES
+ : Predicate<"Subtarget->isSVEAvailable() ||"
+ "(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_AES())">,
+ AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSSVE_AES),
+ "sve or ssve-aes">;
+def HasNonStreamingSVE_or_SSVE_BitPerm
+ : Predicate<"Subtarget->isSVEAvailable() ||"
+ "(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_BitPerm())">,
+ AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSSVE_BitPerm),
+ "sve or ssve-bitperm">;
def HasNonStreamingSVE_or_SSVE_FEXPA
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE()) ||"
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_FEXPA())">,
@@ -267,11 +282,6 @@ def HasSVE2_or_SME2
: Predicate<"Subtarget->hasSVE2() || (Subtarget->isStreaming() && Subtarget->hasSME2())">,
AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSME2),
"sve2 or sme2">;
-def HasNonStreamingSVE2_or_SSVE_AES
- : Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE2()) ||"
- "(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_AES())">,
- AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSSVE_AES),
- "sve2 or ssve-aes">;
def HasSVE2p1_or_SME
: Predicate<"Subtarget->hasSVE2p1() || (Subtarget->isStreaming() && Subtarget->hasSME())">,
@@ -300,11 +310,6 @@ def HasSMEF16F16_or_SMEF8F16
: Predicate<"Subtarget->isStreaming() && (Subtarget->hasSMEF16F16() || Subtarget->hasSMEF8F16())">,
AssemblerPredicateWithAll<(any_of FeatureSMEF16F16, FeatureSMEF8F16),
"sme-f16f16 or sme-f8f16">;
-def HasNonStreamingSVE2_or_SSVE_BitPerm
- : Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE2()) ||"
- "(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_BitPerm())">,
- AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSSVE_BitPerm),
- "sve2 or ssve-bitperm">;
// A subset of NEON instructions are legal in Streaming SVE execution mode,
// so don't need the additional check for 'isNeonAvailable'.
diff --git a/llvm/lib/Target/AArch64/AArch64Processors.td b/llvm/lib/Target/AArch64/AArch64Processors.td
index e1b82953aad80..ad041788e4d5d 100644
--- a/llvm/lib/Target/AArch64/AArch64Processors.td
+++ b/llvm/lib/Target/AArch64/AArch64Processors.td
@@ -897,7 +897,7 @@ def ProcessorFeatures {
FeatureFPAC, FeatureFP16FML, FeatureRandGen,
FeatureSSBS, FeatureLS64, FeatureCLRBHB,
FeatureSPECRES2, FeatureSVEAES, FeatureSVE2SM4,
- FeatureSVE2SHA3, FeatureSVE2, FeatureSVEBitPerm, FeatureETE,
+ FeatureSVESHA3, FeatureSVE2, FeatureSVEBitPerm, FeatureETE,
FeatureMEC, FeatureFAMINMAX, FeatureFP8DOT2, FeatureFP8DOT4,
FeatureFP8FMA, FeatureLUT];
list<SubtargetFeature> Carmel = [HasV8_2aOps, FeatureNEON, FeatureSHA2, FeatureAES,
@@ -910,7 +910,7 @@ def ProcessorFeatures {
FeatureLS64, FeatureLUT, FeatureMEC,
FeatureMTE, FeaturePerfMon, FeatureRandGen,
FeatureSPE, FeatureSPE_EEF, FeatureSSBS,
- FeatureSVEBitPerm, FeatureSVE2SHA3,
+ FeatureSVEBitPerm, FeatureSVESHA3,
FeatureSVE2SM4, FeatureSVEAES];
list<SubtargetFeature> AppleA7 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
FeatureNEON,FeaturePerfMon];
@@ -1107,7 +1107,7 @@ def ProcessorFeatures {
FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
FeatureSSBS, FeatureCCIDX,
FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
- list<SubtargetFeature> Grace = !listconcat(NeoverseV2, [FeatureSVE2SM4, FeatureSVEAES, FeatureSVE2SHA3]);
+ list<SubtargetFeature> Grace = !listconcat(NeoverseV2, [FeatureSVE2SM4, FeatureSVEAES, FeatureSVESHA3]);
// ETE and TRBE are future architecture extensions. We temporarily enable them
// by default for users targeting generic AArch64. The extensions do not
diff --git a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
index 2360e30de63b0..af56f6a876221 100644
--- a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
@@ -4062,7 +4062,7 @@ let Predicates = [HasSVE2_or_SME] in {
defm WHILERW_PXX : sve2_int_while_rr<0b1, "whilerw", "int_aarch64_sve_whilerw">;
} // End HasSVE2_or_SME
-let Predicates = [HasSVEAES, HasNonStreamingSVE2_or_SSVE_AES] in {
+let Predicates = [HasSVEAES, HasNonStreamingSVE_or_SSVE_AES] in {
// SVE2 crypto destructive binary operations
let isCommutable = 1 in {
def AESE_ZZZ_B : sve2_crypto_des_bin_op<0b00, "aese", ZPR8, int_aarch64_sve_aese, nxv16i8>;
@@ -4087,19 +4087,19 @@ let Predicates = [HasSVE2SM4] in {
def SM4E_ZZZ_S : sve2_crypto_des_bin_op<0b10, "sm4e", ZPR32, int_aarch64_sve_sm4e, nxv4i32>;
} // End HasSVE2SM4
-let Predicates = [HasSVE2SHA3] in {
+let Predicates = [HasSVESHA3, HasNonStreamingSVE_or_SME2p1] in {
// SVE2 crypto constructive binary operations
defm RAX1_ZZZ_D : sve2_crypto_cons_bin_op<0b1, "rax1", ZPR64, int_aarch64_sve_rax1, nxv2i64>;
-} // End HasSVE2SHA3
+} // End HasSVESHA3, HasNonStreamingSVE_or_SME2p1
-let Predicates = [HasSVEBitPerm, HasNonStreamingSVE2_or_SSVE_BitPerm] in {
+let Predicates = [HasSVEBitPerm, HasNonStreamingSVE_or_SSVE_BitPerm] in {
// SVE2 bitwise permute
defm BEXT_ZZZ : sve2_misc_bitwise<0b1100, "bext", int_aarch64_sve_bext_x>;
defm BDEP_ZZZ : sve2_misc_bitwise<0b1101, "bdep", int_aarch64_sve_bdep_x>;
defm BGRP_ZZZ : sve2_misc_bitwise<0b1110, "bgrp", int_aarch64_sve_bgrp_x>;
}
-let Predicates = [HasSVEAES2, HasNonStreamingSVE2_or_SSVE_AES] in {
+let Predicates = [HasSVEAES2, HasNonStreamingSVE_or_SSVE_AES] in {
// SVE_AES2 multi-vector instructions (x2)
def AESE_2ZZI_B : sve_crypto_binary_multi2<0b000, "aese">;
def AESD_2ZZI_B : sve_crypto_binary_multi2<0b010, "aesd">;
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index faa82abbd898a..214d6fe246d98 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -3752,7 +3752,8 @@ static const struct Extension {
{"sve-aes", {AArch64::FeatureSVEAES}},
{"sve2-aes", {AArch64::FeatureAliasSVE2AES, AArch64::FeatureSVEAES}},
{"sve2-sm4", {AArch64::FeatureSVE2SM4}},
- {"sve2-sha3", {AArch64::FeatureSVE2SHA3}},
+ {"sve-sha3", {AArch64::FeatureSVESHA3}},
+ {"sve2-sha3", {AArch64::FeatureAliasSVE2SHA3, AArch64::FeatureSVESHA3}},
{"sve-bitperm", {AArch64::FeatureSVEBitPerm}},
{"sve2-bitperm",
{AArch64::FeatureAliasSVE2BitPerm, AArch64::FeatureSVEBitPerm,
diff --git a/llvm/lib/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp
index 4a2523440f0f0..2c805e2f7e664 100644
--- a/llvm/lib/TargetParser/AArch64TargetParser.cpp
+++ b/llvm/lib/TargetParser/AArch64TargetParser.cpp
@@ -298,6 +298,13 @@ void AArch64::ExtensionSet::disable(ArchExtKind E) {
if (E == AEK_SVE2AES)
disable(AEK_SVEAES);
+ // sve2-sha3 was historically associated with both FEAT_SVE2 and
+ // FEAT_SVE_SHA3, the latter is now associated with sve-sha3 and sve2-sha3 has
+ // become shorthand for +sve2+sve-sha3. For backwards compatibility, when we
+ // disable sve2-sha3 we must also disable sve-sha3.
+ if (E == AEK_SVE2SHA3)
+ disable(AEK_SVESHA3);
+
if (E == AEK_SVE2BITPERM){
disable(AEK_SVEBITPERM);
disable(AEK_SVE2);
diff --git a/llvm/test/CodeGen/AArch64/sve2-intrinsics-bit-permutation.ll b/llvm/test/CodeGen/AArch64/sve2-intrinsics-bit-permutation.ll
index 5cbe88213680a..67e8896cf7556 100644
--- a/llvm/test/CodeGen/AArch64/sve2-intrinsics-bit-permutation.ll
+++ b/llvm/test/CodeGen/AArch64/sve2-intrinsics-bit-permutation.ll
@@ -1,5 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2,+sve2-bitperm < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2-bitperm < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sve-bitperm < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+ssve-bitperm < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme,+ssve-bitperm -force-streaming < %s | FileCheck %s
;
; BDEP
diff --git a/llvm/test/CodeGen/AArch64/sve2-intrinsics-crypto.ll b/llvm/test/CodeGen/AArch64/sve2-intrinsics-crypto.ll
index fc08f2cdf94a9..1647f0bd299a8 100644
--- a/llvm/test/CodeGen/AArch64/sve2-intrinsics-crypto.ll
+++ b/llvm/test/CodeGen/AArch64/sve2-intrinsics-crypto.ll
@@ -1,6 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2-aes < %s | FileCheck %s
-; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2,+sve-aes < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sve-aes < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+ssve-aes < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme,+ssve-aes -force-streaming < %s | FileCheck %s
;
; AESD
diff --git a/llvm/test/CodeGen/AArch64/sve2-intrinsics-rax1.ll b/llvm/test/CodeGen/AArch64/sve2-intrinsics-rax1.ll
index 9590c3432ad2c..8f208955630b4 100644
--- a/llvm/test/CodeGen/AArch64/sve2-intrinsics-rax1.ll
+++ b/llvm/test/CodeGen/AArch64/sve2-intrinsics-rax1.ll
@@ -1,5 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2-sha3 < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sve-sha3 < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p1,+sve-sha3 -force-streaming < %s | FileCheck %s
;
; RAX1
diff --git a/llvm/test/MC/AArch64/SME2p1/directive-arch_extension-negative.s b/llvm/test/MC/AArch64/SME2p1/directive-arch_extension-negative.s
index 659c6b09a58c6..dc1ed19c658e8 100644
--- a/llvm/test/MC/AArch64/SME2p1/directive-arch_extension-negative.s
+++ b/llvm/test/MC/AArch64/SME2p1/directive-arch_extension-negative.s
@@ -23,5 +23,5 @@ bfadd za.h[w8, 3], {z20.h-z21.h}
.arch_extension ssve-aes
.arch_extension nossve-aes
aesdimc {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0]
-// CHECK: error: instruction requires: sve2 or ssve-aes
+// CHECK: error: instruction requires: sve or ssve-aes
// CHECK: aesdimc {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0]
diff --git a/llvm/test/MC/AArch64/SVE2/aesd.s b/llvm/test/MC/AArch64/SVE2/aesd.s
index 44cc99c842913..0456e2849fc70 100644
--- a/llvm/test/MC/AArch64/SVE2/aesd.s
+++ b/llvm/test/MC/AArch64/SVE2/aesd.s
@@ -17,5 +17,5 @@
aesd z0.b, z0.b, z31.b
// CHECK-INST: aesd z0.b, z0.b, z31.b
// CHECK-ENCODING: [0xe0,0xe7,0x22,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4522e7e0 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/aese.s b/llvm/test/MC/AArch64/SVE2/aese.s
index 12da19e06db1c..28cf390846403 100644
--- a/llvm/test/MC/AArch64/SVE2/aese.s
+++ b/llvm/test/MC/AArch64/SVE2/aese.s
@@ -17,5 +17,5 @@
aese z0.b, z0.b, z31.b
// CHECK-INST: aese z0.b, z0.b, z31.b
// CHECK-ENCODING: [0xe0,0xe3,0x22,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4522e3e0 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/aesimc.s b/llvm/test/MC/AArch64/SVE2/aesimc.s
index 7027f6a834e63..0fbcb15b12d6d 100644
--- a/llvm/test/MC/AArch64/SVE2/aesimc.s
+++ b/llvm/test/MC/AArch64/SVE2/aesimc.s
@@ -17,11 +17,11 @@
aesimc z0.b, z0.b
// CHECK-INST: aesimc z0.b, z0.b
// CHECK-ENCODING: [0x00,0xe4,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4520e400 <unknown>
aesimc z31.b, z31.b
// CHECK-INST: aesimc z31.b, z31.b
// CHECK-ENCODING: [0x1f,0xe4,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4520e41f <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/aesmc.s b/llvm/test/MC/AArch64/SVE2/aesmc.s
index 1ad56b4762b20..4b0ebcca1de65 100644
--- a/llvm/test/MC/AArch64/SVE2/aesmc.s
+++ b/llvm/test/MC/AArch64/SVE2/aesmc.s
@@ -17,11 +17,11 @@
aesmc z0.b, z0.b
// CHECK-INST: aesmc z0.b, z0.b
// CHECK-ENCODING: [0x00,0xe0,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4520e000 <unknown>
aesmc z31.b, z31.b
// CHECK-INST: aesmc z31.b, z31.b
// CHECK-ENCODING: [0x1f,0xe0,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 4520e01f <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/bdep.s b/llvm/test/MC/AArch64/SVE2/bdep.s
index 44c848d0b3b59..30927d6956d12 100644
--- a/llvm/test/MC/AArch64/SVE2/bdep.s
+++ b/llvm/test/MC/AArch64/SVE2/bdep.s
@@ -14,23 +14,23 @@
bdep z0.b, z1.b, z31.b
// CHECK-INST: bdep z0.b, z1.b, z31.b
// CHECK-ENCODING: [0x20,0xb4,0x1f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 451fb420 <unknown>
bdep z0.h, z1.h, z31.h
// CHECK-INST: bdep z0.h, z1.h, z31.h
// CHECK-ENCODING: [0x20,0xb4,0x5f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 455fb420 <unknown>
bdep z0.s, z1.s, z31.s
// CHECK-INST: bdep z0.s, z1.s, z31.s
// CHECK-ENCODING: [0x20,0xb4,0x9f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 459fb420 <unknown>
bdep z0.d, z1.d, z31.d
// CHECK-INST: bdep z0.d, z1.d, z31.d
// CHECK-ENCODING: [0x20,0xb4,0xdf,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 45dfb420 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/bext.s b/llvm/test/MC/AArch64/SVE2/bext.s
index ea519c22cceb5..8d5fc5788a505 100644
--- a/llvm/test/MC/AArch64/SVE2/bext.s
+++ b/llvm/test/MC/AArch64/SVE2/bext.s
@@ -14,23 +14,23 @@
bext z0.b, z1.b, z31.b
// CHECK-INST: bext z0.b, z1.b, z31.b
// CHECK-ENCODING: [0x20,0xb0,0x1f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 451fb020 <unknown>
bext z0.h, z1.h, z31.h
// CHECK-INST: bext z0.h, z1.h, z31.h
// CHECK-ENCODING: [0x20,0xb0,0x5f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 455fb020 <unknown>
bext z0.s, z1.s, z31.s
// CHECK-INST: bext z0.s, z1.s, z31.s
// CHECK-ENCODING: [0x20,0xb0,0x9f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 459fb020 <unknown>
bext z0.d, z1.d, z31.d
// CHECK-INST: bext z0.d, z1.d, z31.d
// CHECK-ENCODING: [0x20,0xb0,0xdf,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 45dfb020 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/bgrp.s b/llvm/test/MC/AArch64/SVE2/bgrp.s
index eb58d13511583..196eeb304b901 100644
--- a/llvm/test/MC/AArch64/SVE2/bgrp.s
+++ b/llvm/test/MC/AArch64/SVE2/bgrp.s
@@ -14,23 +14,23 @@
bgrp z0.b, z1.b, z31.b
// CHECK-INST: bgrp z0.b, z1.b, z31.b
// CHECK-ENCODING: [0x20,0xb8,0x1f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 451fb820 <unknown>
bgrp z0.h, z1.h, z31.h
// CHECK-INST: bgrp z0.h, z1.h, z31.h
// CHECK-ENCODING: [0x20,0xb8,0x5f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 455fb820 <unknown>
bgrp z0.s, z1.s, z31.s
// CHECK-INST: bgrp z0.s, z1.s, z31.s
// CHECK-ENCODING: [0x20,0xb8,0x9f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 459fb820 <unknown>
bgrp z0.d, z1.d, z31.d
// CHECK-INST: bgrp z0.d, z1.d, z31.d
// CHECK-ENCODING: [0x20,0xb8,0xdf,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK-ERROR: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-UNKNOWN: 45dfb820 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s b/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s
index 2cfce3b232ffc..c3e19a7ad4d03 100644
--- a/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s
+++ b/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s
@@ -26,7 +26,7 @@ sm4e z0.s, z0.s, z0.s
.arch armv9-a+sve2-sha3
.arch armv9-a+nosve2-sha3
rax1 z0.d, z0.d, z0.d
-// CHECK: error: instruction requires: sve2-sha3
+// CHECK: error: instruction requires: sve-sha3
// CHECK-NEXT: rax1 z0.d, z0.d, z0.d
.arch armv9-a+ssve-bitperm
diff --git a/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s b/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s
index 2fab61597576f..c2ec716e45d5a 100644
--- a/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s
+++ b/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s
@@ -9,7 +9,7 @@ tbx z0.b, z1.b, z2.b
.arch_extension sve-aes
.arch_extension nosve-aes
aesd z23.b, z23.b, z13.b
-// CHECK: error: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK: error: instruction requires: sve-aes
// CHECK-NEXT: aesd z23.b, z23.b, z13.b
// nosve2-aes should disable sve-aes but not sve2.
@@ -28,19 +28,13 @@ sm4e z0.s, z0.s, z0.s
.arch_extension sve2-sha3
.arch_extension nosve2-sha3
rax1 z0.d, z0.d, z0.d
-// CHECK: error: instruction requires: sve2-sha3
+// CHECK: error: instruction requires: sve-sha3
// CHECK-NEXT: rax1 z0.d, z0.d, z0.d
.arch_extension sve2-bitperm
.arch_extension nosve2-bitperm
bgrp z21.s, z10.s, z21.s
-// CHECK: error: instruction requires: sve2 or ssve-bitperm sve-bitperm
-// CHECK-NEXT: bgrp z21.s, z10.s, z21.s
-
-.arch_extension sve2-bitperm
-.arch_extension nosve2
-bgrp z21.s, z10.s, z21.s
-// CHECK: error: instruction requires: sve2 or ssve-bitperm
+// CHECK: error: instruction requires: sve-bitperm
// CHECK-NEXT: bgrp z21.s, z10.s, z21.s
.arch_extension f8f16mm
diff --git a/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s b/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s
index a50b990949424..956dcb1a82a6a 100644
--- a/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s
+++ b/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s
@@ -14,7 +14,7 @@ aesd z23.b, z23.b, z13.b
.cpu generic+sve-aes+nosve-aes
aesd z23.b, z23.b, z13.b
-// CHECK: error: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK: error: instruction requires: sve or ssve-aes sve-aes
// CHECK-NEXT: aesd z23.b, z23.b, z13.b
.cpu generic+sve2-sm4
@@ -26,7 +26,7 @@ sm4e z0.s, z0.s, z0.s
.cpu generic+sve2-sha3
.cpu generic+nosve2-sha3
rax1 z0.d, z0.d, z0.d
-// CHECK: error: instruction requires: sve2-sha3
+// CHECK: error: instruction requires: sve or sme2p1 sve-sha3
// CHECK-NEXT: rax1 z0.d, z0.d, z0.d
.cpu generic+sve2+sve-bitperm
@@ -38,7 +38,7 @@ bgrp z21.s, z10.s, z21.s
.cpu generic+ssve-bitperm
.cpu generic+nossve-bitperm
bgrp z21.s, z10.s, z21.s
-// CHECK: error: instruction requires: sve2 or ssve-bitperm sve-bitperm
+// CHECK: error: instruction requires: sve or ssve-bitperm sve-bitperm
// CHECK-NEXT: bgrp z21.s, z10.s, z21.s
.cpu generic+sve2+f8f16mm
diff --git a/llvm/test/MC/AArch64/SVE2/pmullb-128.s b/llvm/test/MC/AArch64/SVE2/pmullb-128.s
index dd9ae3c46f223..45ed1d3734f11 100644
--- a/llvm/test/MC/AArch64/SVE2/pmullb-128.s
+++ b/llvm/test/MC/AArch64/SVE2/pmullb-128.s
@@ -17,5 +17,5 @@
pmullb z29.q, z30.d, z31.d
// CHECK-INST: pmullb z29.q, z30.d, z31.d
// CHECK-ENCODING: [0xdd,0x6b,0x1f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 451f6bdd <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/pmullt-128.s b/llvm/test/MC/AArch64/SVE2/pmullt-128.s
index b26679d9cb5ff..9173e92f5a9a1 100644
--- a/llvm/test/MC/AArch64/SVE2/pmullt-128.s
+++ b/llvm/test/MC/AArch64/SVE2/pmullt-128.s
@@ -17,5 +17,5 @@
pmullt z29.q, z30.d, z31.d
// CHECK-INST: pmullt z29.q, z30.d, z31.d
// CHECK-ENCODING: [0xdd,0x6f,0x1f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes
// CHECK-UNKNOWN: 451f6fdd <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2/rax1.s b/llvm/test/MC/AArch64/SVE2/rax1.s
index c110d0a83b1c1..8bf70576e7248 100644
--- a/llvm/test/MC/AArch64/SVE2/rax1.s
+++ b/llvm/test/MC/AArch64/SVE2/rax1.s
@@ -1,5 +1,9 @@
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2-sha3 < %s \
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve,+sve-sha3 < %s \
+// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1,+sve-sha3 < %s \
+// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme < %s 2>&1 \
@@ -13,5 +17,5 @@
rax1 z0.d, z1.d, z31.d
// CHECK-INST: rax1 z0.d, z1.d, z31.d
// CHECK-ENCODING: [0x20,0xf4,0x3f,0x45]
-// CHECK-ERROR: instruction requires: sve2-sha3
+// CHECK-ERROR: instruction requires: sve or sme2p1 sve-sha3
// CHECK-UNKNOWN: 453ff420 <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/aesd.s b/llvm/test/MC/AArch64/SVE2p1/aesd.s
index 479335dc36168..fbf23215fdd40 100644
--- a/llvm/test/MC/AArch64/SVE2p1/aesd.s
+++ b/llvm/test/MC/AArch64/SVE2p1/aesd.s
@@ -18,36 +18,36 @@
aesd {z0.b-z1.b}, {z0.b-z1.b}, z0.q[0] // 01000101-00100010-11101100-00000000
// CHECK-INST: aesd { z0.b, z1.b }, { z0.b, z1.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xec,0x22,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4522ec00 <unknown>
aesd {z20.b-z21.b}, {z20.b-z21.b}, z10.q[2] // 01000101-00110010-11101101-01010100
// CHECK-INST: aesd { z20.b, z21.b }, { z20.b, z21.b }, z10.q[2]
// CHECK-ENCODING: [0x54,0xed,0x32,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4532ed54 <unknown>
aesd {z30.b-z31.b}, {z30.b-z31.b}, z31.q[3] // 01000101-00111010-11101111-11111110
// CHECK-INST: aesd { z30.b, z31.b }, { z30.b, z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfe,0xef,0x3a,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453aeffe <unknown>
// x4
aesd {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0] // 01000101-00100110-11101100-00000000
// CHECK-INST: aesd { z0.b - z3.b }, { z0.b - z3.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xec,0x26,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4526ec00 <unknown>
aesd {z20.b-z23.b}, {z20.b-z23.b}, z13.q[1] // 01000101-00101110-11101101-10110100
// CHECK-INST: aesd { z20.b - z23.b }, { z20.b - z23.b }, z13.q[1]
// CHECK-ENCODING: [0xb4,0xed,0x2e,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 452eedb4 <unknown>
aesd {z28.b-z31.b}, {z28.b-z31.b}, z31.q[3] // 01000101-00111110-11101111-11111100
// CHECK-INST: aesd { z28.b - z31.b }, { z28.b - z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfc,0xef,0x3e,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453eeffc <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/aesdimc.s b/llvm/test/MC/AArch64/SVE2p1/aesdimc.s
index d1b0b130f9ec2..9e7f38ee8fdb8 100644
--- a/llvm/test/MC/AArch64/SVE2p1/aesdimc.s
+++ b/llvm/test/MC/AArch64/SVE2p1/aesdimc.s
@@ -19,36 +19,36 @@
aesdimc {z0.b-z1.b}, {z0.b-z1.b}, z0.q[0] // 01000101-00100011-11101100-00000000
// CHECK-INST: aesdimc { z0.b, z1.b }, { z0.b, z1.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xec,0x23,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4523ec00 <unknown>
aesdimc {z20.b-z21.b}, {z20.b-z21.b}, z10.q[2] // 01000101-00110011-11101101-01010100
// CHECK-INST: aesdimc { z20.b, z21.b }, { z20.b, z21.b }, z10.q[2]
// CHECK-ENCODING: [0x54,0xed,0x33,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4533ed54 <unknown>
aesdimc {z30.b-z31.b}, {z30.b-z31.b}, z31.q[3] // 01000101-00111011-11101111-11111110
// CHECK-INST: aesdimc { z30.b, z31.b }, { z30.b, z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfe,0xef,0x3b,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453beffe <unknown>
// x4
aesdimc {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0] // 01000101-00100111-11101100-00000000
// CHECK-INST: aesdimc { z0.b - z3.b }, { z0.b - z3.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xec,0x27,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4527ec00 <unknown>
aesdimc {z20.b-z23.b}, {z20.b-z23.b}, z13.q[1] // 01000101-00101111-11101101-10110100
// CHECK-INST: aesdimc { z20.b - z23.b }, { z20.b - z23.b }, z13.q[1]
// CHECK-ENCODING: [0xb4,0xed,0x2f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 452fedb4 <unknown>
aesdimc {z28.b-z31.b}, {z28.b-z31.b}, z31.q[3] // 01000101-00111111-11101111-11111100
// CHECK-INST: aesdimc { z28.b - z31.b }, { z28.b - z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfc,0xef,0x3f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453feffc <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/aese.s b/llvm/test/MC/AArch64/SVE2p1/aese.s
index 1f8ef5e85a15a..17f7d19b62ff6 100644
--- a/llvm/test/MC/AArch64/SVE2p1/aese.s
+++ b/llvm/test/MC/AArch64/SVE2p1/aese.s
@@ -18,36 +18,36 @@
aese {z0.b-z1.b}, {z0.b-z1.b}, z0.q[0] // 01000101-00100010-11101000-00000000
// CHECK-INST: aese { z0.b, z1.b }, { z0.b, z1.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xe8,0x22,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4522e800 <unknown>
aese {z20.b-z21.b}, {z20.b-z21.b}, z10.q[2] // 01000101-00110010-11101001-01010100
// CHECK-INST: aese { z20.b, z21.b }, { z20.b, z21.b }, z10.q[2]
// CHECK-ENCODING: [0x54,0xe9,0x32,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4532e954 <unknown>
aese {z30.b-z31.b}, {z30.b-z31.b}, z31.q[3] // 01000101-00111010-11101011-11111110
// CHECK-INST: aese { z30.b, z31.b }, { z30.b, z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfe,0xeb,0x3a,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453aebfe <unknown>
// x4
aese {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0] // 01000101-00100110-11101000-00000000
// CHECK-INST: aese { z0.b - z3.b }, { z0.b - z3.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xe8,0x26,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4526e800 <unknown>
aese {z20.b-z23.b}, {z20.b-z23.b}, z13.q[1] // 01000101-00101110-11101001-10110100
// CHECK-INST: aese { z20.b - z23.b }, { z20.b - z23.b }, z13.q[1]
// CHECK-ENCODING: [0xb4,0xe9,0x2e,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 452ee9b4 <unknown>
aese {z28.b-z31.b}, {z28.b-z31.b}, z31.q[3] // 01000101-00111110-11101011-11111100
// CHECK-INST: aese { z28.b - z31.b }, { z28.b - z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfc,0xeb,0x3e,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453eebfc <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/aesemc.s b/llvm/test/MC/AArch64/SVE2p1/aesemc.s
index 5682ce87737a0..2d58732d50466 100644
--- a/llvm/test/MC/AArch64/SVE2p1/aesemc.s
+++ b/llvm/test/MC/AArch64/SVE2p1/aesemc.s
@@ -18,36 +18,36 @@
aesemc {z0.b-z1.b}, {z0.b-z1.b}, z0.q[0] // 01000101-00100011-11101000-00000000
// CHECK-INST: aesemc { z0.b, z1.b }, { z0.b, z1.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xe8,0x23,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4523e800 <unknown>
aesemc {z22.b-z23.b}, {z22.b-z23.b}, z13.q[1] // 01000101-00101011-11101001-10110110
// CHECK-INST: aesemc { z22.b, z23.b }, { z22.b, z23.b }, z13.q[1]
// CHECK-ENCODING: [0xb6,0xe9,0x2b,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 452be9b6 <unknown>
aesemc {z30.b-z31.b}, {z30.b-z31.b}, z31.q[3] // 01000101-00111011-11101011-11111110
// CHECK-INST: aesemc { z30.b, z31.b }, { z30.b, z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfe,0xeb,0x3b,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453bebfe <unknown>
// x4
aesemc {z0.b-z3.b}, {z0.b-z3.b}, z0.q[0] // 01000101-00100111-11101000-00000000
// CHECK-INST: aesemc { z0.b - z3.b }, { z0.b - z3.b }, z0.q[0]
// CHECK-ENCODING: [0x00,0xe8,0x27,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4527e800 <unknown>
aesemc {z20.b-z23.b}, {z20.b-z23.b}, z10.q[2] // 01000101-00110111-11101001-01010100
// CHECK-INST: aesemc { z20.b - z23.b }, { z20.b - z23.b }, z10.q[2]
// CHECK-ENCODING: [0x54,0xe9,0x37,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4537e954 <unknown>
aesemc {z28.b-z31.b}, {z28.b-z31.b}, z31.q[3] // 01000101-00111111-11101011-11111100
// CHECK-INST: aesemc { z28.b - z31.b }, { z28.b - z31.b }, z31.q[3]
// CHECK-ENCODING: [0xfc,0xeb,0x3f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453febfc <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/pmlal.s b/llvm/test/MC/AArch64/SVE2p1/pmlal.s
index 6a3751e9ac25e..596def7a52c22 100644
--- a/llvm/test/MC/AArch64/SVE2p1/pmlal.s
+++ b/llvm/test/MC/AArch64/SVE2p1/pmlal.s
@@ -17,17 +17,17 @@
pmlal {z0.q-z1.q}, z0.d, z0.d // 01000101-00100000-11111100-00000000
// CHECK-INST: pmlal { z0.q, z1.q }, z0.d, z0.d
// CHECK-ENCODING: [0x00,0xfc,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4520fc00 <unknown>
pmlal {z22.q-z23.q}, z13.d, z8.d // 01000101-00101000-11111101-10110110
// CHECK-INST: pmlal { z22.q, z23.q }, z13.d, z8.d
// CHECK-ENCODING: [0xb6,0xfd,0x28,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4528fdb6 <unknown>
pmlal {z30.q-z31.q}, z31.d, z31.d // 01000101-00111111-11111111-11111110
// CHECK-INST: pmlal { z30.q, z31.q }, z31.d, z31.d
// CHECK-ENCODING: [0xfe,0xff,0x3f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453ffffe <unknown>
diff --git a/llvm/test/MC/AArch64/SVE2p1/pmull.s b/llvm/test/MC/AArch64/SVE2p1/pmull.s
index 3686181c35b77..4b6b20931abfb 100644
--- a/llvm/test/MC/AArch64/SVE2p1/pmull.s
+++ b/llvm/test/MC/AArch64/SVE2p1/pmull.s
@@ -17,17 +17,17 @@
pmull {z0.q-z1.q}, z0.d, z0.d // 01000101-00100000-11111000-00000000
// CHECK-INST: pmull { z0.q, z1.q }, z0.d, z0.d
// CHECK-ENCODING: [0x00,0xf8,0x20,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4520f800 <unknown>
pmull {z22.q-z23.q}, z13.d, z8.d // 01000101-00101000-11111001-10110110
// CHECK-INST: pmull { z22.q, z23.q }, z13.d, z8.d
// CHECK-ENCODING: [0xb6,0xf9,0x28,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 4528f9b6 <unknown>
pmull {z30.q-z31.q}, z31.d, z31.d // 01000101-00111111-11111011-11111110
// CHECK-INST: pmull { z30.q, z31.q }, z31.d, z31.d
// CHECK-ENCODING: [0xfe,0xfb,0x3f,0x45]
-// CHECK-ERROR: instruction requires: sve2 or ssve-aes sve-aes2
+// CHECK-ERROR: instruction requires: sve or ssve-aes sve-aes2
// CHECK-UNKNOWN: 453ffbfe <unknown>
diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp
index c4efb991ab6fd..97ee8dd1cb67b 100644
--- a/llvm/unittests/TargetParser/TargetParserTest.cpp
+++ b/llvm/unittests/TargetParser/TargetParserTest.cpp
@@ -1440,7 +1440,7 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
AArch64::AEK_PCDPHINT, AArch64::AEK_POPS,
AArch64::AEK_SVEAES, AArch64::AEK_SME_MOP4,
AArch64::AEK_SME_TMOP, AArch64::AEK_SVEBITPERM,
- AArch64::AEK_SSVE_BITPERM,
+ AArch64::AEK_SSVE_BITPERM, AArch64::AEK_SVESHA3,
};
std::vector<StringRef> Features;
@@ -1479,6 +1479,7 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
EXPECT_TRUE(llvm::is_contained(Features, "+sve-aes"));
EXPECT_TRUE(llvm::is_contained(Features, "+sve2-aes"));
EXPECT_TRUE(llvm::is_contained(Features, "+sve2-sm4"));
+ EXPECT_TRUE(llvm::is_contained(Features, "+sve-sha3"));
EXPECT_TRUE(llvm::is_contained(Features, "+sve2-sha3"));
EXPECT_TRUE(llvm::is_contained(Features, "+sve-bitperm"));
EXPECT_TRUE(llvm::is_contained(Features, "+sve2-bitperm"));
@@ -1651,6 +1652,7 @@ TEST(TargetParserTest, AArch64ArchExtFeature) {
{"sve-f16f32mm", "nosve-f16f32mm", "+sve-f16f32mm", "-sve-f16f32mm"},
{"sve2", "nosve2", "+sve2", "-sve2"},
{"sve-aes", "nosve-aes", "+sve-aes", "-sve-aes"},
+ {"sve-sha3", "nosve-sha3", "+sve-sha3", "-sve-sha3"},
{"sve2-aes", "nosve2-aes", "+sve2-aes", "-sve2-aes"},
{"sve2-sm4", "nosve2-sm4", "+sve2-sm4", "-sve2-sm4"},
{"sve2-sha3", "nosve2-sha3", "+sve2-sha3", "-sve2-sha3"},
@@ -2159,6 +2161,12 @@ AArch64ExtensionDependenciesBaseArchTestParams
{"sve2"},
{"sve2-aes", "sve-aes"}},
+ // -sve2-sha3 should disable sve-sha3 (only)
+ {AArch64::ARMV9_6A,
+ {"sve2", "sve-sha3", "nosve2-sha3"},
+ {"sve2"},
+ {"sve2-sha3", "sve-sha3"}},
+
// sme-tmop -> sme
{AArch64::ARMV8A, {"nosme2", "sme-tmop"}, {"sme2", "sme-tmop"}, {}},
{AArch64::ARMV8A, {"sme-tmop", "nosme2"}, {}, {"sme2", "sme-tmop"}},
More information about the cfe-commits
mailing list