Author: Elvina Yakubova Date: 2025-07-08T17:04:21+01:00 New Revision: bd6e9047dda95f0acf0207094bbc8c0f6ce27eb7
URL: https://github.com/llvm/llvm-project/commit/bd6e9047dda95f0acf0207094bbc8c0f6ce27eb7 DIFF: https://github.com/llvm/llvm-project/commit/bd6e9047dda95f0acf0207094bbc8c0f6ce27eb7.diff LOG: [LLVM][AArch64] Relax SVE codegen predicates for sm4 instructions (#147524) Adds sve-sm4 to reference FEAT_SVE_SM4 without specifically enabling SVE2. Added: Modified: clang/test/CodeGen/AArch64/fmv-dependencies.c clang/test/Driver/aarch64-implied-sve-features.c clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c clang/test/Driver/print-enabled-extensions/aarch64-gb10.c clang/test/Driver/print-enabled-extensions/aarch64-grace.c clang/test/Driver/print-enabled-extensions/aarch64-olympus.c clang/test/Driver/print-supported-extensions-aarch64.c llvm/lib/Target/AArch64/AArch64.td llvm/lib/Target/AArch64/AArch64Features.td llvm/lib/Target/AArch64/AArch64InstrInfo.td llvm/lib/Target/AArch64/AArch64Processors.td llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp llvm/lib/TargetParser/AArch64TargetParser.cpp llvm/test/CodeGen/AArch64/sve2-intrinsics-sm4.ll llvm/test/MC/AArch64/SVE2/directive-arch-negative.s llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s llvm/test/MC/AArch64/SVE2/sm4e.s llvm/test/MC/AArch64/SVE2/sm4ekey.s llvm/unittests/TargetParser/TargetParserTest.cpp Removed: ################################################################################ diff --git a/clang/test/CodeGen/AArch64/fmv-dependencies.c b/clang/test/CodeGen/AArch64/fmv-dependencies.c index a97c4e95cd032..8f7f23f93dfea 100644 --- a/clang/test/CodeGen/AArch64/fmv-dependencies.c +++ b/clang/test/CodeGen/AArch64/fmv-dependencies.c @@ -189,6 +189,6 @@ int caller() { // 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,+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 #[[sve2_sm4]] = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+outline-atomics,+sm4,+sve,+sve-sm4,+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 18c39974a5c14..1bda2f529fc70 100644 --- a/clang/test/Driver/aarch64-implied-sve-features.c +++ b/clang/test/Driver/aarch64-implied-sve-features.c @@ -49,7 +49,7 @@ // 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" +// SVE2-SM4-REVERT: "-target-feature" "+sve" "-target-feature" "-sve-sm4" "-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" "+sve-sha3" "-target-feature" "+sve2" "-target-feature" "+sve2-sha3" @@ -61,14 +61,14 @@ // SVE2-AES: "-target-feature" "+sve" "-target-feature" "+sve-aes" "-target-feature" "+sve2" "-target-feature" "+sve2-aes" // RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-sm4 %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SM4 -// SVE2-SM4: "-target-feature" "+sve" "-target-feature" "+sve2" "-target-feature" "+sve2-sm4" +// SVE2-SM4: "-target-feature" "+sve" "-target-feature" "+sve-sm4" "-target-feature" "+sve2" "-target-feature" "+sve2-sm4" // RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-bitperm+nosve2-aes %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SUBFEATURE-MIX // SVE2-SUBFEATURE-MIX: "-target-feature" "+sve" "-target-feature" "+sve-bitperm" "-target-feature" "+sve2" "-target-feature" "+sve2-bitperm" // SVE2-SUBFEATURE-NOT: sve2-aes // RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-sm4+nosve2 %s -### 2>&1 | FileCheck %s --check-prefix=SVE2-SUBFEATURE-CONFLICT -// SVE2-SUBFEATURE-CONFLICT: "-target-feature" "+sve" "-target-feature" "-sve2" "-target-feature" "-sve2-sm4" +// SVE2-SUBFEATURE-CONFLICT: "-target-feature" "+sve" "-target-feature" "-sve-sm4" "-target-feature" "-sve2" "-target-feature" "-sve2-sm4" // RUN: %clang --target=aarch64-linux-gnu -march=armv8-a+sve2-aes+nosve %s -### 2>&1 | FileCheck %s --check-prefix=SVE-SUBFEATURE-CONFLICT // SVE-SUBFEATURE-CONFLICT-NOT: "-target-feature" "+sve2-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 8576edff9bcbe..e0802b3866cc8 100644 --- a/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c +++ b/clang/test/Driver/print-enabled-extensions/aarch64-fujitsu-monaka.c @@ -71,7 +71,7 @@ // 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 SVE SHA3 instructions -// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions +// CHECK-NEXT: FEAT_SVE_SM4 Enable SVE SM4 instructions // CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions // CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension // CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-gb10.c b/clang/test/Driver/print-enabled-extensions/aarch64-gb10.c index 589f7e3e5ee4e..f482a1bd1a31e 100644 --- a/clang/test/Driver/print-enabled-extensions/aarch64-gb10.c +++ b/clang/test/Driver/print-enabled-extensions/aarch64-gb10.c @@ -59,7 +59,7 @@ // 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 SVE SHA3 instructions -// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions +// CHECK-NEXT: FEAT_SVE_SM4 Enable SVE SM4 instructions // CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions // CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension // CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c index bb24dfbbc0702..78d991c3ab184 100644 --- a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c +++ b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c @@ -55,7 +55,7 @@ // 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 SVE SHA3 instructions -// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions +// CHECK-NEXT: FEAT_SVE_SM4 Enable SVE SM4 instructions // CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions // CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension // CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c b/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c index 0cfb9e1fb9817..c50c0b130307b 100644 --- a/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c +++ b/clang/test/Driver/print-enabled-extensions/aarch64-olympus.c @@ -71,7 +71,7 @@ // 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 SVE SHA3 instructions -// CHECK-NEXT: FEAT_SVE_SM4 Enable SM4 SVE2 instructions +// CHECK-NEXT: FEAT_SVE_SM4 Enable SVE SM4 instructions // CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions // CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension // CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension diff --git a/clang/test/Driver/print-supported-extensions-aarch64.c b/clang/test/Driver/print-supported-extensions-aarch64.c index af4db9944c2df..5c840a60685c6 100644 --- a/clang/test/Driver/print-supported-extensions-aarch64.c +++ b/clang/test/Driver/print-supported-extensions-aarch64.c @@ -93,11 +93,12 @@ // 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: sve-sm4 FEAT_SVE_SM4 Enable SVE SM4 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 Shorthand for +sve2+sve-sha3 -// CHECK-NEXT: sve2-sm4 FEAT_SVE_SM4 Enable SM4 SVE2 instructions +// CHECK-NEXT: sve2-sm4 Shorthand for +sve2+sve-sm4 // 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 // CHECK-NEXT: the FEAT_THE Enable Armv8.9-A Translation Hardening Extension diff --git a/llvm/lib/Target/AArch64/AArch64.td b/llvm/lib/Target/AArch64/AArch64.td index 25cdcae4e41de..86f95488e6bb7 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, HasNonStreamingSVE2_or_SME2, HasSSVE_FP8FMA, HasSMEF8F16, - HasSMEF8F32, HasSVEAES, HasSVESHA3, HasSVE2SM4, HasSVEBitPerm, + HasSMEF8F32, HasSVEAES, HasSVESHA3, HasSVESM4, HasSVEBitPerm, HasSVEB16B16], SVE2p1Unsupported.F); } diff --git a/llvm/lib/Target/AArch64/AArch64Features.td b/llvm/lib/Target/AArch64/AArch64Features.td index 05562516e5198..9973df865ea17 100644 --- a/llvm/lib/Target/AArch64/AArch64Features.td +++ b/llvm/lib/Target/AArch64/AArch64Features.td @@ -370,8 +370,11 @@ def FeatureSVEAES : ExtensionWithMArch<"sve-aes", "SVEAES", def FeatureAliasSVE2AES : ExtensionWithMArch<"sve2-aes", "SVE2AES", "", "Shorthand for +sve2+sve-aes", [FeatureSVE2, FeatureSVEAES]>; -def FeatureSVE2SM4 : ExtensionWithMArch<"sve2-sm4", "SVE2SM4", "FEAT_SVE_SM4", - "Enable SM4 SVE2 instructions", [FeatureSVE2, FeatureSM4]>; +def FeatureSVESM4 : ExtensionWithMArch<"sve-sm4", "SVESM4", "FEAT_SVE_SM4", + "Enable SVE SM4 instructions", [FeatureSM4]>; + +def FeatureAliasSVE2SM4 : ExtensionWithMArch<"sve2-sm4", "SVE2SM4", + "", "Shorthand for +sve2+sve-sm4", [FeatureSVE2, FeatureSVESM4]>; def FeatureSVESHA3 : ExtensionWithMArch<"sve-sha3", "SVESHA3", "FEAT_SVE_SHA3", "Enable SVE SHA3 instructions", [FeatureSHA3]>; diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td index 0cb7b02d84a6e..811877ffacedb 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -151,8 +151,8 @@ def HasSVE2p1 : Predicate<"Subtarget->isSVEAvailable() && Subtarget->hasS AssemblerPredicateWithAll<(all_of FeatureSVE2p1), "sve2p1">; 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 HasSVESM4 : Predicate<"Subtarget->isSVEAvailable() && Subtarget->hasSVESM4()">, + AssemblerPredicateWithAll<(all_of FeatureSVESM4), "sve-sm4">; def HasSVESHA3 : Predicate<"Subtarget->hasSVESHA3()">, AssemblerPredicateWithAll<(all_of FeatureSVESHA3), "sve-sha3">; def HasSVEBitPerm : Predicate<"Subtarget->hasSVEBitPerm()">, diff --git a/llvm/lib/Target/AArch64/AArch64Processors.td b/llvm/lib/Target/AArch64/AArch64Processors.td index 4484951821337..5379305bc7a7f 100644 --- a/llvm/lib/Target/AArch64/AArch64Processors.td +++ b/llvm/lib/Target/AArch64/AArch64Processors.td @@ -906,7 +906,7 @@ def ProcessorFeatures { list<SubtargetFeature> MONAKA = [HasV9_3aOps, FeaturePerfMon, FeatureCCIDX, FeatureFPAC, FeatureFP16FML, FeatureRandGen, FeatureSSBS, FeatureLS64, FeatureCLRBHB, - FeatureSPECRES2, FeatureSVEAES, FeatureSVE2SM4, + FeatureSPECRES2, FeatureSVEAES, FeatureSVESM4, FeatureSVESHA3, FeatureSVE2, FeatureSVEBitPerm, FeatureETE, FeatureMEC, FeatureFAMINMAX, FeatureFP8DOT2, FeatureFP8DOT4, FeatureFP8FMA, FeatureLUT]; @@ -921,7 +921,7 @@ def ProcessorFeatures { FeatureMTE, FeaturePerfMon, FeatureRandGen, FeatureSPE, FeatureSPE_EEF, FeatureSSBS, FeatureSVEBitPerm, FeatureSVESHA3, - FeatureSVE2SM4, FeatureSVEAES]; + FeatureSVESM4, FeatureSVEAES, FeatureSVE2]; list<SubtargetFeature> AppleA7 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON,FeaturePerfMon]; list<SubtargetFeature> AppleA10 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, @@ -1117,8 +1117,8 @@ def ProcessorFeatures { FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureSSBS, FeatureCCIDX, FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM]; - list<SubtargetFeature> GB10 = !listconcat(X925, [FeatureSVEAES, FeatureSVESHA3, FeatureSVE2SM4]); - list<SubtargetFeature> Grace = !listconcat(NeoverseV2, [FeatureSVE2SM4, FeatureSVEAES, FeatureSVESHA3]); + list<SubtargetFeature> GB10 = !listconcat(X925, [FeatureSVEAES, FeatureSVESHA3, FeatureSVESM4]); + list<SubtargetFeature> Grace = !listconcat(NeoverseV2, [FeatureSVESM4, 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 261df563bb2a9..3c0fd785de29b 100644 --- a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td @@ -4118,12 +4118,12 @@ let Predicates = [HasSVEAES, HasNonStreamingSVE_or_SSVE_AES] in { defm PMULLT_ZZZ_Q : sve2_wide_int_arith_pmul<0b00, 0b11011, "pmullt", int_aarch64_sve_pmullt_pair>; } -let Predicates = [HasSVE2SM4] in { +let Predicates = [HasSVESM4] in { // SVE2 crypto constructive binary operations defm SM4EKEY_ZZZ_S : sve2_crypto_cons_bin_op<0b0, "sm4ekey", ZPR32, int_aarch64_sve_sm4ekey, nxv4i32>; // SVE2 crypto destructive binary operations def SM4E_ZZZ_S : sve2_crypto_des_bin_op<0b10, "sm4e", ZPR32, int_aarch64_sve_sm4e, nxv4i32>; -} // End HasSVE2SM4 +} // End HasSVESM4 let Predicates = [HasSVESHA3, HasNonStreamingSVE_or_SME2p1] in { // SVE2 crypto constructive binary operations diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index 07c4302cf3d25..1ca61f5c6b349 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -3742,7 +3742,8 @@ static const struct Extension { {"sve2", {AArch64::FeatureSVE2}}, {"sve-aes", {AArch64::FeatureSVEAES}}, {"sve2-aes", {AArch64::FeatureAliasSVE2AES, AArch64::FeatureSVEAES}}, - {"sve2-sm4", {AArch64::FeatureSVE2SM4}}, + {"sve-sm4", {AArch64::FeatureSVESM4}}, + {"sve2-sm4", {AArch64::FeatureAliasSVE2SM4, AArch64::FeatureSVESM4}}, {"sve-sha3", {AArch64::FeatureSVESHA3}}, {"sve2-sha3", {AArch64::FeatureAliasSVE2SHA3, AArch64::FeatureSVESHA3}}, {"sve-bitperm", {AArch64::FeatureSVEBitPerm}}, diff --git a/llvm/lib/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp index c17fa729bac4f..9432fc2c4ac8d 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-sm4 was historically associated with both FEAT_SVE2 and + // FEAT_SVE_SM4, the latter is now associated with sve-sm4 and sve2-sm4 has + // become shorthand for +sve2+sve-sm4. For backwards compatibility, when we + // disable sve2-sm4 we must also disable sve-sm4. + if (E == AEK_SVE2SM4) + disable(AEK_SVESM4); + // 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 diff --git a/llvm/test/CodeGen/AArch64/sve2-intrinsics-sm4.ll b/llvm/test/CodeGen/AArch64/sve2-intrinsics-sm4.ll index de5af6ce0ae99..fb7dcb3485c68 100644 --- a/llvm/test/CodeGen/AArch64/sve2-intrinsics-sm4.ll +++ b/llvm/test/CodeGen/AArch64/sve2-intrinsics-sm4.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2-sm4 < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sve-sm4 < %s | FileCheck %s ; ; SM4E diff --git a/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s b/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s index c3e19a7ad4d03..b20fed789a8ed 100644 --- a/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s +++ b/llvm/test/MC/AArch64/SVE2/directive-arch-negative.s @@ -20,7 +20,7 @@ aesd z23.b, z23.b, z13.b .arch armv9-a+sve2-sm4 .arch armv9-a+nosve2-sm4 sm4e z0.s, z0.s, z0.s -// CHECK: error: instruction requires: sve2-sm4 +// CHECK: error: instruction requires: sve-sm4 // CHECK-NEXT: sm4e z0.s, z0.s, z0.s .arch armv9-a+sve2-sha3 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 c2ec716e45d5a..73114e57fc18a 100644 --- a/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s +++ b/llvm/test/MC/AArch64/SVE2/directive-arch_extension-negative.s @@ -22,7 +22,7 @@ aesd z23.b, z23.b, z13.b .arch_extension sve2-sm4 .arch_extension nosve2-sm4 sm4e z0.s, z0.s, z0.s -// CHECK: error: instruction requires: sve2-sm4 +// CHECK: error: instruction requires: sve-sm4 // CHECK-NEXT: sm4e z0.s, z0.s, z0.s .arch_extension sve2-sha3 diff --git a/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s b/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s index 956dcb1a82a6a..e5b2a4c2b57aa 100644 --- a/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s +++ b/llvm/test/MC/AArch64/SVE2/directive-cpu-negative.s @@ -20,7 +20,7 @@ aesd z23.b, z23.b, z13.b .cpu generic+sve2-sm4 .cpu generic+nosve2-sm4 sm4e z0.s, z0.s, z0.s -// CHECK: error: instruction requires: sve2-sm4 +// CHECK: error: instruction requires: sve-sm4 // CHECK-NEXT: sm4e z0.s, z0.s, z0.s .cpu generic+sve2-sha3 diff --git a/llvm/test/MC/AArch64/SVE2/sm4e.s b/llvm/test/MC/AArch64/SVE2/sm4e.s index 329484bc4b4a5..5c9745cd90a43 100644 --- a/llvm/test/MC/AArch64/SVE2/sm4e.s +++ b/llvm/test/MC/AArch64/SVE2/sm4e.s @@ -13,5 +13,5 @@ sm4e z0.s, z0.s, z31.s // CHECK-INST: sm4e z0.s, z0.s, z31.s // CHECK-ENCODING: [0xe0,0xe3,0x23,0x45] -// CHECK-ERROR: instruction requires: sve2-sm4 +// CHECK-ERROR: instruction requires: sve-sm4 // CHECK-UNKNOWN: 4523e3e0 <unknown> diff --git a/llvm/test/MC/AArch64/SVE2/sm4ekey.s b/llvm/test/MC/AArch64/SVE2/sm4ekey.s index c81e39e19167a..1aee0e509c7e6 100644 --- a/llvm/test/MC/AArch64/SVE2/sm4ekey.s +++ b/llvm/test/MC/AArch64/SVE2/sm4ekey.s @@ -13,5 +13,5 @@ sm4ekey z0.s, z1.s, z31.s // CHECK-INST: sm4ekey z0.s, z1.s, z31.s // CHECK-ENCODING: [0x20,0xf0,0x3f,0x45] -// CHECK-ERROR: instruction requires: sve2-sm4 +// CHECK-ERROR: instruction requires: sve-sm4 // CHECK-UNKNOWN: 453ff020 <unknown> diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp index 1d7ad8ac075f4..aeeea0a391ba9 100644 --- a/llvm/unittests/TargetParser/TargetParserTest.cpp +++ b/llvm/unittests/TargetParser/TargetParserTest.cpp @@ -1442,6 +1442,7 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) { AArch64::AEK_SVEAES, AArch64::AEK_SME_MOP4, AArch64::AEK_SME_TMOP, AArch64::AEK_SVEBITPERM, AArch64::AEK_SSVE_BITPERM, AArch64::AEK_SVESHA3, + AArch64::AEK_SVESM4, }; std::vector<StringRef> Features; @@ -1479,6 +1480,7 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) { EXPECT_TRUE(llvm::is_contained(Features, "+sve2")); EXPECT_TRUE(llvm::is_contained(Features, "+sve-aes")); EXPECT_TRUE(llvm::is_contained(Features, "+sve2-aes")); + EXPECT_TRUE(llvm::is_contained(Features, "+sve-sm4")); EXPECT_TRUE(llvm::is_contained(Features, "+sve2-sm4")); EXPECT_TRUE(llvm::is_contained(Features, "+sve-sha3")); EXPECT_TRUE(llvm::is_contained(Features, "+sve2-sha3")); @@ -1653,6 +1655,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-sm4", "nosve-sm4", "+sve-sm4", "-sve-sm4"}, {"sve-sha3", "nosve-sha3", "+sve-sha3", "-sve-sha3"}, {"sve2-aes", "nosve2-aes", "+sve2-aes", "-sve2-aes"}, {"sve2-sm4", "nosve2-sm4", "+sve2-sm4", "-sve2-sm4"}, @@ -2162,6 +2165,12 @@ AArch64ExtensionDependenciesBaseArchTestParams {"sve2"}, {"sve2-aes", "sve-aes"}}, + // -sve2-sm4 should disable sve-sm4 (only) + {AArch64::ARMV9_6A, + {"sve2", "sve-sm4", "nosve2-sm4"}, + {"sve2"}, + {"sve2-sm4", "sve-sm4"}}, + // -sve2-sha3 should disable sve-sha3 (only) {AArch64::ARMV9_6A, {"sve2", "sve-sha3", "nosve2-sha3"}, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits