diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index e125ad551f0985..13515699caea45 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -258,7 +258,7 @@ bool AArch64TargetInfo::validateBranchProtection(StringRef Spec, StringRef, } bool AArch64TargetInfo::isValidCPUName(StringRef Name) const { - return Name == "generic" || llvm::AArch64::parseCpu(Name); + return llvm::AArch64::parseCpu(Name).has_value(); } bool AArch64TargetInfo::setCPU(const std::string &Name) { diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 2cd2b35ee51bc6..ec248b80251ea3 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -98,16 +98,12 @@ static bool DecodeAArch64Mcpu(const Driver &D, StringRef Mcpu, StringRef &CPU, if (CPU == "native") CPU = llvm::sys::getHostCPUName(); - if (CPU == "generic") { - Extensions.enable(llvm::AArch64::AEK_SIMD); - } else { - const std::optional CpuInfo = - llvm::AArch64::parseCpu(CPU); - if (!CpuInfo) - return false; + const std::optional CpuInfo = + llvm::AArch64::parseCpu(CPU); + if (!CpuInfo) + return false; - Extensions.addCPUDefaults(*CpuInfo); - } + Extensions.addCPUDefaults(*CpuInfo); if (Split.second.size() && !DecodeAArch64Features(D, Split.second, Extensions)) diff --git a/clang/test/CodeGen/aarch64-targetattr.c b/clang/test/CodeGen/aarch64-targetattr.c index 3e7a2092456071..2fbe1056670727 100644 --- a/clang/test/CodeGen/aarch64-targetattr.c +++ b/clang/test/CodeGen/aarch64-targetattr.c @@ -1,115 +1,232 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --check-globals // RUN: %clang_cc1 -triple aarch64 -emit-llvm %s -o - | FileCheck %s -// CHECK-LABEL: @v82() #0 __attribute__((target("arch=armv8.2-a"))) +// CHECK-LABEL: define {{[^@]+}}@v82 +// CHECK-SAME: () #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v82() {} -// CHECK-LABEL: @v82sve() #1 __attribute__((target("arch=armv8.2-a+sve"))) +// CHECK-LABEL: define {{[^@]+}}@v82sve +// CHECK-SAME: () #[[ATTR1:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v82sve() {} -// CHECK-LABEL: @v82sve2() #2 __attribute__((target("arch=armv8.2-a+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@v82sve2 +// CHECK-SAME: () #[[ATTR2:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v82sve2() {} -// CHECK-LABEL: @v82svesve2() #2 __attribute__((target("arch=armv8.2-a+sve+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@v82svesve2 +// CHECK-SAME: () #[[ATTR2]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v82svesve2() {} -// CHECK-LABEL: @v86sve2() #3 __attribute__((target("arch=armv8.6-a+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@v86sve2 +// CHECK-SAME: () #[[ATTR3:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v86sve2() {} -// CHECK-LABEL: @a710() #4 __attribute__((target("cpu=cortex-a710"))) +// CHECK-LABEL: define {{[^@]+}}@a710 +// CHECK-SAME: () #[[ATTR4:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void a710() {} -// CHECK-LABEL: @tunea710() #5 __attribute__((target("tune=cortex-a710"))) +// CHECK-LABEL: define {{[^@]+}}@tunea710 +// CHECK-SAME: () #[[ATTR5:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void tunea710() {} -// CHECK-LABEL: @generic() #6 __attribute__((target("cpu=generic"))) +// CHECK-LABEL: define {{[^@]+}}@generic +// CHECK-SAME: () #[[ATTR6:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void generic() {} -// CHECK-LABEL: @tune() #7 __attribute__((target("tune=generic"))) +// CHECK-LABEL: define {{[^@]+}}@tune +// CHECK-SAME: () #[[ATTR7:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void tune() {} -// CHECK-LABEL: @n1tunea710() #8 __attribute__((target("cpu=neoverse-n1,tune=cortex-a710"))) +// CHECK-LABEL: define {{[^@]+}}@n1tunea710 +// CHECK-SAME: () #[[ATTR8:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void n1tunea710() {} -// CHECK-LABEL: @svetunea710() #9 __attribute__((target("sve,tune=cortex-a710"))) +// CHECK-LABEL: define {{[^@]+}}@svetunea710 +// CHECK-SAME: () #[[ATTR9:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void svetunea710() {} -// CHECK-LABEL: @plussvetunea710() #9 __attribute__((target("+sve,tune=cortex-a710"))) +// CHECK-LABEL: define {{[^@]+}}@plussvetunea710 +// CHECK-SAME: () #[[ATTR9]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plussvetunea710() {} -// CHECK-LABEL: @v1plussve2() #10 __attribute__((target("cpu=neoverse-v1,+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@v1plussve2 +// CHECK-SAME: () #[[ATTR10:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v1plussve2() {} -// CHECK-LABEL: @v1sve2() #10 __attribute__((target("cpu=neoverse-v1+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@v1sve2 +// CHECK-SAME: () #[[ATTR10]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v1sve2() {} -// CHECK-LABEL: @v1minussve() #11 __attribute__((target("cpu=neoverse-v1,+nosve"))) +// CHECK-LABEL: define {{[^@]+}}@v1minussve +// CHECK-SAME: () #[[ATTR11:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v1minussve() {} -// CHECK-LABEL: @v1nosve() #11 __attribute__((target("cpu=neoverse-v1,no-sve"))) +// CHECK-LABEL: define {{[^@]+}}@v1nosve +// CHECK-SAME: () #[[ATTR11]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v1nosve() {} -// CHECK-LABEL: @v1msve() #11 __attribute__((target("cpu=neoverse-v1+nosve"))) +// CHECK-LABEL: define {{[^@]+}}@v1msve +// CHECK-SAME: () #[[ATTR11]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void v1msve() {} -// CHECK-LABEL: @plussve() #12 __attribute__((target("+sve"))) +// CHECK-LABEL: define {{[^@]+}}@plussve +// CHECK-SAME: () #[[ATTR12:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plussve() {} -// CHECK-LABEL: @plussveplussve2() #13 __attribute__((target("+sve+nosve2"))) +// CHECK-LABEL: define {{[^@]+}}@plussveplussve2 +// CHECK-SAME: () #[[ATTR13:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plussveplussve2() {} -// CHECK-LABEL: @plussveminusnosve2() #13 __attribute__((target("sve,no-sve2"))) +// CHECK-LABEL: define {{[^@]+}}@plussveminusnosve2 +// CHECK-SAME: () #[[ATTR13]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plussveminusnosve2() {} -// CHECK-LABEL: @plusfp16() #14 __attribute__((target("+fp16"))) +// CHECK-LABEL: define {{[^@]+}}@plusfp16 +// CHECK-SAME: () #[[ATTR14:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plusfp16() {} -// CHECK-LABEL: @all() #15 __attribute__((target("cpu=neoverse-n1,tune=cortex-a710,arch=armv8.6-a+sve2"))) +// CHECK-LABEL: define {{[^@]+}}@all +// CHECK-SAME: () #[[ATTR15:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void all() {} -// CHECK-LABEL: @allplusbranchprotection() #16 __attribute__((target("cpu=neoverse-n1,tune=cortex-a710,arch=armv8.6-a+sve2,branch-protection=standard"))) +// CHECK-LABEL: define {{[^@]+}}@allplusbranchprotection +// CHECK-SAME: () #[[ATTR16:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void allplusbranchprotection() {} // These tests check that the user facing and internal llvm name are both accepted. -// CHECK-LABEL: @plusnoneon() #17 __attribute__((target("+noneon"))) +// CHECK-LABEL: define {{[^@]+}}@plusnoneon +// CHECK-SAME: () #[[ATTR17:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plusnoneon() {} -// CHECK-LABEL: @plusnosimd() #17 __attribute__((target("+nosimd"))) +// CHECK-LABEL: define {{[^@]+}}@plusnosimd +// CHECK-SAME: () #[[ATTR17]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void plusnosimd() {} -// CHECK-LABEL: @noneon() #17 __attribute__((target("no-neon"))) +// CHECK-LABEL: define {{[^@]+}}@noneon +// CHECK-SAME: () #[[ATTR17]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void noneon() {} -// CHECK-LABEL: @nosimd() #17 __attribute__((target("no-simd"))) +// CHECK-LABEL: define {{[^@]+}}@nosimd +// CHECK-SAME: () #[[ATTR17]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void nosimd() {} // This isn't part of the standard interface, but test that -arch features should not apply anything else. -// CHECK-LABEL: @minusarch() #18 __attribute__((target("no-v9.3a"))) +// CHECK-LABEL: define {{[^@]+}}@minusarch +// CHECK-SAME: () #[[ATTR18:[0-9]+]] { +// CHECK-NEXT: entry: +// CHECK-NEXT: ret void +// void minusarch() {} -// CHECK: attributes #0 = { {{.*}} "target-features"="+crc,+fp-armv8,+lse,+neon,+ras,+rdm,+v8.1a,+v8.2a,+v8a" } -// CHECK: attributes #1 = { {{.*}} "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+v8.1a,+v8.2a,+v8a" } -// CHECK: attributes #2 = { {{.*}} "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8a" } -// CHECK: attributes #3 = { {{.*}} "target-features"="+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+ras,+rcpc,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" } -// CHECK: attributes #4 = { {{.*}} "target-cpu"="cortex-a710" "target-features"="+bf16,+complxnum,+crc,+dotprod,+flagm,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+mte,+neon,+pauth,+ras,+rcpc,+rdm,+sb,+sve,+sve2,+sve2-bitperm" } -// CHECK: attributes #5 = { {{.*}} "tune-cpu"="cortex-a710" } -// CHECK: attributes #6 = { {{.*}} "target-cpu"="generic" } -// CHECK: attributes #7 = { {{.*}} "tune-cpu"="generic" } -// CHECK: attributes #8 = { {{.*}} "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs" "tune-cpu"="cortex-a710" } -// CHECK: attributes #9 = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+sve" "tune-cpu"="cortex-a710" } -// CHECK: attributes #10 = { {{.*}} "target-cpu"="neoverse-v1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+rand,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,+sve,+sve2" } -// CHECK: attributes #11 = { {{.*}} "target-cpu"="neoverse-v1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+rand,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,-sve" } -// CHECK: attributes #12 = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+sve" } -// CHECK: attributes #13 = { {{.*}} "target-features"="+fp-armv8,+fullfp16,+neon,+sve,-sve2" } -// CHECK: attributes #14 = { {{.*}} "target-features"="+fullfp16" } -// CHECK: attributes #15 = { {{.*}} "target-cpu"="neoverse-n1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } -// CHECK: attributes #16 = { {{.*}} "branch-target-enforcement"="true" "guarded-control-stack"="true" {{.*}} "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } -// CHECK: attributes #17 = { {{.*}} "target-features"="-neon" } -// CHECK: attributes #18 = { {{.*}} "target-features"="-v9.3a" } +//. +// CHECK: attributes #[[ATTR0]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+crc,+fp-armv8,+lse,+neon,+ras,+rdm,+v8.1a,+v8.2a,+v8a" } +// CHECK: attributes #[[ATTR1]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+v8.1a,+v8.2a,+v8a" } +// CHECK: attributes #[[ATTR2]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8a" } +// CHECK: attributes #[[ATTR3]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+ras,+rcpc,+rdm,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" } +// CHECK: attributes #[[ATTR4]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cortex-a710" "target-features"="+bf16,+complxnum,+crc,+dotprod,+flagm,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+mte,+neon,+pauth,+perfmon,+ras,+rcpc,+rdm,+sb,+sve,+sve2,+sve2-bitperm" } +// CHECK: attributes #[[ATTR5]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="cortex-a710" } +// CHECK: attributes #[[ATTR6]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+fp-armv8,+neon" } +// CHECK: attributes #[[ATTR7]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" } +// CHECK: attributes #[[ATTR8]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+crc,+dotprod,+fp-armv8,+fullfp16,+lse,+neon,+perfmon,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs" "tune-cpu"="cortex-a710" } +// CHECK: attributes #[[ATTR9]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+fullfp16,+neon,+sve" "tune-cpu"="cortex-a710" } +// CHECK: attributes #[[ATTR10]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-v1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+rand,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,+sve,+sve2" } +// CHECK: attributes #[[ATTR11]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-v1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+rand,+ras,+rcpc,+rdm,+sha2,+sha3,+sm4,+spe,+ssbs,-sve" } +// CHECK: attributes #[[ATTR12]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+fullfp16,+neon,+sve" } +// CHECK: attributes #[[ATTR13]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+fullfp16,+neon,+sve,-sve2" } +// CHECK: attributes #[[ATTR14]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fullfp16" } +// CHECK: attributes #[[ATTR15]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } +// CHECK: attributes #[[ATTR16]] = { noinline nounwind optnone "branch-protection-pauth-lr"="false" "branch-target-enforcement"="true" "guarded-control-stack"="true" "no-trapping-math"="true" "sign-return-address"="non-leaf" "sign-return-address-key"="a_key" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+bf16,+complxnum,+crc,+dotprod,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+ras,+rcpc,+rdm,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" } +// CHECK: attributes #[[ATTR17]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="-neon" } +// CHECK: attributes #[[ATTR18]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="-v9.3a" } +//. +// CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4} +// CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"} +//. diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c index ffc57db825bbc7..2fd823db3df12b 100644 --- a/clang/test/Misc/target-invalid-cpu-note.c +++ b/clang/test/Misc/target-invalid-cpu-note.c @@ -5,11 +5,11 @@ // RUN: not %clang_cc1 -triple arm64--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix AARCH64 // AARCH64: error: unknown target CPU 'not-a-cpu' -// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-a725, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, cortex-x925, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-a17, apple-m1, apple-m2, apple-m3, apple-m4, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, ampere1b, oryon-1, cobalt-100, grace{{$}} +// AARCH64-NEXT: note: valid target CPU values are: generic, cortex-a35, cortex-a34, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-a725, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, cortex-x925, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx, thunderxt88, thunderxt81, thunderxt83, thunderx2t99, thunderx3t110, tsv110, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-s4, apple-s5, apple-a13, apple-a14, apple-m1, apple-a15, apple-m2, apple-a16, apple-m3, apple-a17, apple-m4, a64fx, carmel, ampere1, ampere1a, ampere1b, oryon-1, cobalt-100, grace{{$}} // RUN: not %clang_cc1 -triple arm64--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_AARCH64 // TUNE_AARCH64: error: unknown target CPU 'not-a-cpu' -// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-a725, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, cortex-x925, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-a17, apple-m1, apple-m2, apple-m3, apple-m4, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, ampere1b, oryon-1, cobalt-100, grace{{$}} +// TUNE_AARCH64-NEXT: note: valid target CPU values are: generic, cortex-a35, cortex-a34, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-a725, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, cortex-x925, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx, thunderxt88, thunderxt81, thunderxt83, thunderx2t99, thunderx3t110, tsv110, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-s4, apple-s5, apple-a13, apple-a14, apple-m1, apple-a15, apple-m2, apple-a16, apple-m3, apple-a17, apple-m4, a64fx, carmel, ampere1, ampere1a, ampere1b, oryon-1, cobalt-100, grace{{$}} // RUN: not %clang_cc1 -triple i386--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86 // X86: error: unknown target CPU 'not-a-cpu' diff --git a/clang/test/Preprocessor/aarch64-target-features.c b/clang/test/Preprocessor/aarch64-target-features.c index c707972fb41d2e..6f359461dea885 100644 --- a/clang/test/Preprocessor/aarch64-target-features.c +++ b/clang/test/Preprocessor/aarch64-target-features.c @@ -315,30 +315,30 @@ // RUN: %clang -target aarch64 -mcpu=thunderx2t99 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-THUNDERX2T99 %s // RUN: %clang -target aarch64 -mcpu=a64fx -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-A64FX %s // RUN: %clang -target aarch64 -mcpu=carmel -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-CARMEL %s -// CHECK-MCPU-APPLE-A7: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8a" "-target-feature" "+aes"{{.*}} "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-APPLE-A10: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8a" "-target-feature" "+aes"{{.*}} "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-APPLE-A11: "-cc1"{{.*}} "-triple" "aarch64{{.*}}"{{.*}}"-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-APPLE-A12: "-cc1"{{.*}} "-triple" "aarch64"{{.*}} "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.3a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-A34: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-APPLE-A13: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "apple-a13" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+neon" -// CHECK-MCPU-A35: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-A53: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-A72: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-CORTEX-A73: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-APPLE-A7: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8a" "-target-feature" "+aes"{{.*}} "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-APPLE-A10: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8a" "-target-feature" "+aes"{{.*}} "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-APPLE-A11: "-cc1"{{.*}} "-triple" "aarch64{{.*}}"{{.*}}"-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-APPLE-A12: "-cc1"{{.*}} "-triple" "aarch64"{{.*}} "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.3a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-A34: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-APPLE-A13: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "apple-a13" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+neon" +// CHECK-MCPU-A35: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-A53: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-A72: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-CORTEX-A73: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" // CHECK-MCPU-CORTEX-R82: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8r" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+flagm" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+predres" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+neon" "-target-feature" "+ssbs" -// CHECK-MCPU-M3: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-M4: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-KRYO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-M3: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-M4: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-MCPU-KRYO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" // CHECK-MCPU-THUNDERX2T99: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.1a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+lse" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" -// CHECK-MCPU-A64FX: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" "-target-feature" "+sve" +// CHECK-MCPU-A64FX: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" "-target-feature" "+sve" // CHECK-MCPU-CARMEL: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" // RUN: %clang -target x86_64-apple-macosx -arch arm64 -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-ARCH-ARM64 %s -// CHECK-ARCH-ARM64: "-target-cpu" "apple-m1" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+neon" +// CHECK-ARCH-ARM64: "-target-cpu" "apple-m1" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+predres" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+neon" "-target-feature" "+ssbs" // RUN: %clang -target x86_64-apple-macosx -arch arm64_32 -### -c %s 2>&1 | FileCheck --check-prefix=CHECK-ARCH-ARM64_32 %s -// CHECK-ARCH-ARM64_32: "-target-cpu" "apple-s4" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.3a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" +// CHECK-ARCH-ARM64_32: "-target-cpu" "apple-s4" "-target-feature" "+zcm" "-target-feature" "+zcz" "-target-feature" "+v8.3a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" // RUN: %clang -target aarch64 -march=armv8-a+fp+simd+crc+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MARCH-1 %s // RUN: %clang -target aarch64 -march=armv8-a+nofp+nosimd+nocrc+nocrypto+fp+simd+crc+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MARCH-1 %s @@ -464,7 +464,7 @@ // RUN: %clang -target aarch64 -mcpu=cortex-a53+noSIMD -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-3 %s // CHECK-MCPU-1: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "-aes"{{.*}} "-target-feature" "-sha2" // CHECK-MCPU-2: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+neon" -// CHECK-MCPU-3: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "-aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "-sha2" "-target-feature" "-neon" +// CHECK-MCPU-3: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "-aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "-sha2" "-target-feature" "-neon" // RUN: %clang -target aarch64 -mcpu=cyclone+nocrc+nocrypto -march=armv8-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-MARCH %s // RUN: %clang -target aarch64 -march=armv8-a -mcpu=cyclone+nocrc+nocrypto -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MCPU-MARCH %s diff --git a/flang/test/Driver/target-cpu-features.f90 b/flang/test/Driver/target-cpu-features.f90 index 68f1403f96d036..eea7a0f665b34e 100644 --- a/flang/test/Driver/target-cpu-features.f90 +++ b/flang/test/Driver/target-cpu-features.f90 @@ -31,11 +31,11 @@ ! CHECK-A57: "-fc1" "-triple" "aarch64-unknown-linux-gnu" ! CHECK-A57-SAME: "-target-cpu" "cortex-a57" -! CHECK-A57-SAME: "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon" +! CHECK-A57-SAME: "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+perfmon" "-target-feature" "+sha2" "-target-feature" "+neon" ! CHECK-A76: "-fc1" "-triple" "aarch64-unknown-linux-gnu" ! CHECK-A76-SAME: "-target-cpu" "cortex-a76" -! CHECK-A76-SAME: "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" "-target-feature" "+ssbs" +! CHECK-A76-SAME: "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+perfmon" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon" "-target-feature" "+ssbs" ! CHECK-ARMV9: "-fc1" "-triple" "aarch64-unknown-linux-gnu" ! CHECK-ARMV9-SAME: "-target-cpu" "generic" diff --git a/llvm/include/llvm/TargetParser/AArch64TargetParser.h b/llvm/include/llvm/TargetParser/AArch64TargetParser.h index c1a68a0ec5c195..e1962b31b04677 100644 --- a/llvm/include/llvm/TargetParser/AArch64TargetParser.h +++ b/llvm/include/llvm/TargetParser/AArch64TargetParser.h @@ -261,347 +261,8 @@ struct CpuInfo { } }; -inline constexpr CpuInfo CpuInfos[] = { - {"cortex-a34", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a35", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a53", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a55", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC})}, - {"cortex-a510", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_SB, - AArch64::AEK_PAUTH, AArch64::AEK_MTE, AArch64::AEK_SSBS, - AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FP16FML})}, - {"cortex-a520", ARMV9_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE, - AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})}, - {"cortex-a520ae", ARMV9_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE, - AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})}, - {"cortex-a57", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a65", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_RCPC, AArch64::AEK_SSBS})}, - {"cortex-a65ae", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_RCPC, AArch64::AEK_SSBS})}, - {"cortex-a72", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a73", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"cortex-a75", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC})}, - {"cortex-a76", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC, AArch64::AEK_SSBS})}, - {"cortex-a76ae", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC, AArch64::AEK_SSBS})}, - {"cortex-a77", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_RCPC, - AArch64::AEK_DOTPROD, AArch64::AEK_SSBS})}, - {"cortex-a78", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE})}, - {"cortex-a78ae", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE})}, - {"cortex-a78c", ARMV8_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE, AArch64::AEK_FLAGM, AArch64::AEK_PAUTH})}, - {"cortex-a710", ARMV9A, - AArch64::ExtensionBitset({AArch64::AEK_MTE, AArch64::AEK_PAUTH, - AArch64::AEK_FLAGM, AArch64::AEK_SB, - AArch64::AEK_I8MM, AArch64::AEK_FP16FML, - AArch64::AEK_SVE, AArch64::AEK_SVE2, - AArch64::AEK_SVE2BITPERM, AArch64::AEK_BF16})}, - {"cortex-a715", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE, - AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, - AArch64::AEK_I8MM, AArch64::AEK_PREDRES, AArch64::AEK_PERFMON, - AArch64::AEK_PROFILE, AArch64::AEK_SVE, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_BF16, AArch64::AEK_FLAGM})}, - {"cortex-a720", ARMV9_2A, - AArch64::ExtensionBitset({AArch64::AEK_SB, AArch64::AEK_SSBS, - AArch64::AEK_MTE, AArch64::AEK_FP16FML, - AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, - AArch64::AEK_PREDRES, AArch64::AEK_PROFILE})}, - {"cortex-a720ae", ARMV9_2A, - AArch64::ExtensionBitset({AArch64::AEK_SB, AArch64::AEK_SSBS, - AArch64::AEK_MTE, AArch64::AEK_FP16FML, - AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, - AArch64::AEK_PREDRES, AArch64::AEK_PROFILE})}, - {"cortex-a725", ARMV9_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_MTE, AArch64::AEK_SSBS, AArch64::AEK_SB, - AArch64::AEK_PREDRES, AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_PROFILE})}, - {"cortex-r82", ARMV8R, - AArch64::ExtensionBitset({AArch64::AEK_LSE, AArch64::AEK_FLAGM, - AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})}, - {"cortex-r82ae", ARMV8R, - AArch64::ExtensionBitset({AArch64::AEK_LSE, AArch64::AEK_FLAGM, - AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})}, - {"cortex-x1", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_DOTPROD, - AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE})}, - {"cortex-x1c", ARMV8_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PAUTH, AArch64::AEK_PROFILE, AArch64::AEK_FLAGM})}, - {"cortex-x2", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_MTE, AArch64::AEK_BF16, AArch64::AEK_I8MM, - AArch64::AEK_PAUTH, AArch64::AEK_SSBS, AArch64::AEK_SB, - AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FP16FML, AArch64::AEK_FLAGM})}, - {"cortex-x3", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_SVE, AArch64::AEK_PERFMON, AArch64::AEK_PROFILE, - AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_MTE, - AArch64::AEK_SVE2BITPERM, AArch64::AEK_SB, AArch64::AEK_PAUTH, - AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_PREDRES, - AArch64::AEK_FLAGM, AArch64::AEK_SSBS})}, - {"cortex-x4", ARMV9_2A, - AArch64::ExtensionBitset({AArch64::AEK_SB, AArch64::AEK_SSBS, - AArch64::AEK_MTE, AArch64::AEK_FP16FML, - AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, - AArch64::AEK_PREDRES, AArch64::AEK_PROFILE})}, - {"cortex-x925", ARMV9_2A, - AArch64::ExtensionBitset({AArch64::AEK_SB, AArch64::AEK_SSBS, - AArch64::AEK_MTE, AArch64::AEK_FP16FML, - AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, - AArch64::AEK_SVE2BITPERM, AArch64::AEK_PERFMON, - AArch64::AEK_PREDRES, AArch64::AEK_PROFILE})}, - {"neoverse-e1", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_RCPC, AArch64::AEK_SSBS})}, - {"neoverse-n1", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_PROFILE, AArch64::AEK_RCPC, - AArch64::AEK_SSBS})}, - {"neoverse-n2", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_BF16, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_I8MM, AArch64::AEK_MTE, - AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_SVE, - AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM})}, - {"neoverse-n3", ARMV9_2A, - AArch64::ExtensionBitset({AArch64::AEK_MTE, AArch64::AEK_SSBS, - AArch64::AEK_SB, AArch64::AEK_PREDRES, - AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, - AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, - AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_PROFILE, AArch64::AEK_PERFMON})}, - {"neoverse-512tvb", ARMV8_4A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3, - AArch64::AEK_SM4, AArch64::AEK_SVE, AArch64::AEK_SSBS, - AArch64::AEK_FP16, AArch64::AEK_BF16, AArch64::AEK_DOTPROD, - AArch64::AEK_PROFILE, AArch64::AEK_RAND, AArch64::AEK_FP16FML, - AArch64::AEK_I8MM})}, - {"neoverse-v1", ARMV8_4A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3, - AArch64::AEK_SM4, AArch64::AEK_SVE, AArch64::AEK_SSBS, - AArch64::AEK_FP16, AArch64::AEK_BF16, AArch64::AEK_DOTPROD, - AArch64::AEK_PROFILE, AArch64::AEK_RAND, AArch64::AEK_FP16FML, - AArch64::AEK_I8MM})}, - {"neoverse-v2", ARMV9A, - AArch64::ExtensionBitset( - {AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SSBS, - AArch64::AEK_FP16, AArch64::AEK_BF16, AArch64::AEK_RAND, - AArch64::AEK_DOTPROD, AArch64::AEK_PROFILE, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FP16FML, AArch64::AEK_I8MM, AArch64::AEK_MTE})}, - {"neoverse-v3", ARMV9_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_PROFILE, AArch64::AEK_MTE, AArch64::AEK_SSBS, - AArch64::AEK_SB, AArch64::AEK_PREDRES, AArch64::AEK_LS64, - AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, - AArch64::AEK_PERFMON, AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FP16FML})}, - {"neoverse-v3ae", ARMV9_2A, - (AArch64::ExtensionBitset( - {AArch64::AEK_PROFILE, AArch64::AEK_MTE, AArch64::AEK_SSBS, - AArch64::AEK_SB, AArch64::AEK_PREDRES, AArch64::AEK_LS64, - AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, - AArch64::AEK_PERFMON, AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_FP16FML}))}, - {"cyclone", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_NONE})}, - {"apple-a7", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_NONE})}, - {"apple-a8", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_NONE})}, - {"apple-a9", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_NONE})}, - {"apple-a10", ARMV8A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_CRC, AArch64::AEK_RDM})}, - {"apple-a11", ARMV8_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16})}, - {"apple-a12", ARMV8_3A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16})}, - {"apple-a13", ARMV8_4A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-a14", ARMV8_4A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-a15", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-a16", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-a17", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - - {"apple-m1", ARMV8_4A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-m2", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - {"apple-m3", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_FP16FML})}, - // Technically apple-m4 is ARMv9.2a, but a quirk of LLVM defines v9.0 as - // requiring SVE, which is optional according to the Arm ARM and not - // supported by the core. ARMv8.7a is the next closest choice. - {"apple-m4", ARMV8_7A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3, - AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SME, - AArch64::AEK_SME2, AArch64::AEK_SMEF64F64, AArch64::AEK_SMEI16I64})}, - {"apple-s4", ARMV8_3A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16})}, - {"apple-s5", ARMV8_3A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16})}, - {"exynos-m3", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"exynos-m4", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16})}, - {"exynos-m5", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16})}, - {"falkor", ARMV8A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_CRC, AArch64::AEK_RDM})}, - {"saphira", ARMV8_3A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_PROFILE})}, - {"kryo", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"thunderx2t99", ARMV8_1A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2})}, - {"thunderx3t110", ARMV8_3A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2})}, - {"thunderx", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"thunderxt88", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"thunderxt81", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"thunderxt83", ARMV8A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})}, - {"tsv110", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, - AArch64::AEK_JSCVT, AArch64::AEK_FCMA})}, - {"a64fx", ARMV8_2A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP16, AArch64::AEK_SVE})}, - {"carmel", ARMV8_2A, - AArch64::ExtensionBitset( - {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16})}, - {"ampere1", ARMV8_6A, - AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP16, - AArch64::AEK_SB, AArch64::AEK_SSBS, - AArch64::AEK_RAND})}, - {"ampere1a", ARMV8_6A, - AArch64::ExtensionBitset( - {AArch64::AEK_FP16, AArch64::AEK_RAND, AArch64::AEK_SM4, - AArch64::AEK_SHA3, AArch64::AEK_SHA2, AArch64::AEK_AES, - AArch64::AEK_MTE, AArch64::AEK_SB, AArch64::AEK_SSBS})}, - {"ampere1b", ARMV8_7A, - AArch64::ExtensionBitset({AArch64::AEK_FP16, AArch64::AEK_RAND, - AArch64::AEK_SM4, AArch64::AEK_SHA3, - AArch64::AEK_SHA2, AArch64::AEK_AES, - AArch64::AEK_MTE, AArch64::AEK_SB, - AArch64::AEK_SSBS, AArch64::AEK_CSSC})}, - {"oryon-1", ARMV8_6A, - (AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_CRYPTO, - AArch64::AEK_RAND, AArch64::AEK_SM4, - AArch64::AEK_SHA3, AArch64::AEK_SHA2, - AArch64::AEK_PROFILE}))}, -}; +#define EMIT_CPU_INFO +#include "llvm/TargetParser/AArch64TargetParserDef.inc" // Name alias. struct Alias { diff --git a/llvm/lib/Target/AArch64/AArch64Processors.td b/llvm/lib/Target/AArch64/AArch64Processors.td index 3c3e2d1a95320f..e32ca629721ff8 100644 --- a/llvm/lib/Target/AArch64/AArch64Processors.td +++ b/llvm/lib/Target/AArch64/AArch64Processors.td @@ -656,7 +656,8 @@ def TuneAmpere1B : SubtargetFeature<"ampere1b", "ARMProcFamily", "Ampere1B", def TuneOryon : SubtargetFeature<"oryon-1", "ARMProcFamily", "Oryon", "Nuvia Inc Oryon processors", [ - FeatureCrypto, + FeatureSHA2, + FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFuseAES, @@ -676,202 +677,228 @@ def TuneOryon : SubtargetFeature<"oryon-1", "ARMProcFamily", HasV8_6aOps]>; def ProcessorFeatures { - list A53 = [HasV8_0aOps, FeatureCRC, FeatureCrypto, + list A53 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon]; - list A55 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A55 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeaturePerfMon]; list A510 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon, FeatureMatMulInt8, FeatureBF16, FeatureAM, FeatureMTE, FeatureETE, FeatureSVE2BitPerm, - FeatureFP16FML]; + FeatureFP16FML, + FeatureSB, FeaturePAuth, FeatureSSBS, FeatureSVE, FeatureSVE2]; list A520 = [HasV9_2aOps, FeaturePerfMon, FeatureAM, FeatureMTE, FeatureETE, FeatureSVE2BitPerm, - FeatureFP16FML]; + FeatureFP16FML, + FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes]; list A520AE = [HasV9_2aOps, FeaturePerfMon, FeatureAM, FeatureMTE, FeatureETE, FeatureSVE2BitPerm, - FeatureFP16FML]; - list A65 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + FeatureFP16FML, + FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes]; + list A65 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeatureSSBS, FeatureRAS, FeaturePerfMon]; - list A76 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A76 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeatureSSBS, FeaturePerfMon]; - list A77 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A77 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeaturePerfMon, FeatureSSBS]; - list A78 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A78 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeaturePerfMon, FeatureSPE, FeatureSSBS]; - list A78AE = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A78AE = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureRCPC, FeaturePerfMon, FeatureSPE, FeatureSSBS]; - list A78C = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list A78C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureFullFP16, FeatureDotProd, FeatureFlagM, FeaturePAuth, FeaturePerfMon, FeatureRCPC, FeatureSPE, FeatureSSBS]; list A710 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon, FeatureETE, FeatureMTE, FeatureFP16FML, - FeatureSVE2BitPerm, FeatureBF16, FeatureMatMulInt8]; + FeatureSVE2BitPerm, FeatureBF16, FeatureMatMulInt8, + FeaturePAuth, FeatureFlagM, FeatureSB, FeatureSVE, FeatureSVE2]; list A715 = [HasV9_0aOps, FeatureNEON, FeatureMTE, FeatureFP16FML, FeatureSVE, FeatureTRBE, FeatureSVE2BitPerm, FeatureBF16, FeatureETE, - FeaturePerfMon, FeatureMatMulInt8, FeatureSPE]; + FeaturePerfMon, FeatureMatMulInt8, FeatureSPE, + FeatureSB, FeatureSSBS, FeatureFullFP16, FeaturePAuth, FeaturePredRes, FeatureFlagM]; list A720 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML, FeatureTRBE, FeatureSVE2BitPerm, FeatureETE, - FeaturePerfMon, FeatureSPE, FeatureSPE_EEF]; + FeaturePerfMon, FeatureSPE, FeatureSPE_EEF, + FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes]; list A720AE = [HasV9_2aOps, FeatureMTE, FeatureFP16FML, FeatureTRBE, FeatureSVE2BitPerm, FeatureETE, - FeaturePerfMon, FeatureSPE, FeatureSPE_EEF]; + FeaturePerfMon, FeatureSPE, FeatureSPE_EEF, + FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes]; list A725 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML, FeatureETE, FeaturePerfMon, FeatureSPE, - FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE]; + FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE, + FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS]; list R82 = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16, FeatureFP16FML, FeatureSSBS, FeaturePredRes, FeatureSB, FeatureRDM, FeatureDotProd, FeatureComplxNum, FeatureJS, - FeatureCacheDeepPersist]; + FeatureCacheDeepPersist, + FeatureLSE, FeatureFlagM]; list R82AE = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16, FeatureFP16FML, FeatureSSBS, FeaturePredRes, FeatureSB, FeatureRDM, FeatureDotProd, FeatureComplxNum, FeatureJS, - FeatureCacheDeepPersist]; - list X1 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + FeatureCacheDeepPersist, + FeatureLSE, FeatureFlagM]; + list X1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureRCPC, FeaturePerfMon, FeatureSPE, FeatureFullFP16, FeatureDotProd, FeatureSSBS]; - list X1C = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list X1C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureRCPC_IMMO, FeaturePerfMon, FeatureSPE, FeatureFullFP16, FeatureDotProd, FeaturePAuth, FeatureSSBS, FeatureFlagM, - FeatureLSE2]; + FeatureLSE2, + FeatureRCPC]; list X2 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon, FeatureMatMulInt8, FeatureBF16, FeatureAM, FeatureMTE, FeatureETE, FeatureSVE2BitPerm, - FeatureFP16FML]; + FeatureFP16FML, + FeaturePAuth, FeatureSSBS, FeatureSB, FeatureSVE, FeatureSVE2, FeatureFlagM]; list X3 = [HasV9_0aOps, FeatureSVE, FeatureNEON, FeaturePerfMon, FeatureETE, FeatureTRBE, FeatureSPE, FeatureBF16, FeatureMatMulInt8, FeatureMTE, FeatureSVE2BitPerm, FeatureFullFP16, - FeatureFP16FML]; + FeatureFP16FML, + FeatureSB, FeaturePAuth, FeaturePredRes, FeatureFlagM, FeatureSSBS]; list X4 = [HasV9_2aOps, FeaturePerfMon, FeatureETE, FeatureTRBE, FeatureSPE, FeatureMTE, FeatureSVE2BitPerm, - FeatureFP16FML, FeatureSPE_EEF]; + FeatureFP16FML, FeatureSPE_EEF, + FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes]; list X925 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML, FeatureETE, FeaturePerfMon, FeatureSPE, - FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE]; + FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE, + FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS]; list A64FX = [HasV8_2aOps, FeatureFPARMv8, FeatureNEON, FeatureSHA2, FeaturePerfMon, FeatureFullFP16, - FeatureSVE, FeatureComplxNum]; - list Carmel = [HasV8_2aOps, FeatureNEON, FeatureCrypto, + FeatureSVE, FeatureComplxNum, + FeatureAES]; + list Carmel = [HasV8_2aOps, FeatureNEON, FeatureSHA2, FeatureAES, FeatureFullFP16]; - list AppleA7 = [HasV8_0aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA7 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON,FeaturePerfMon, FeatureAppleA7SysReg]; - list AppleA10 = [HasV8_0aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA10 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureCRC, FeatureRDM, FeaturePAN, FeatureLOR, FeatureVH]; - list AppleA11 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA11 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureFullFP16]; - list AppleA12 = [HasV8_3aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA12 = [HasV8_3aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureFullFP16]; - list AppleA13 = [HasV8_4aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA13 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureFullFP16, FeatureFP16FML, FeatureSHA3]; - list AppleA14 = [HasV8_4aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA14 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureFullFP16, FeatureFP16FML, FeatureSHA3, // ArmV8.5-a extensions, excluding BTI: FeatureAltFPCmp, FeatureFRInt3264, FeatureSpecRestrict, FeatureSSBS, FeatureSB, FeaturePredRes, FeatureCacheDeepPersist]; - list AppleA15 = [HasV8_6aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA15 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureSHA3, FeatureFullFP16, FeatureFP16FML]; - list AppleA16 = [HasV8_6aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA16 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureSHA3, FeatureFullFP16, FeatureFP16FML, FeatureHCX]; - list AppleA17 = [HasV8_6aOps, FeatureCrypto, FeatureFPARMv8, + list AppleA17 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureSHA3, FeatureFullFP16, FeatureFP16FML, FeatureHCX]; - // Technically apple-m4 is ARMv9.2. See the corresponding comment in - // AArch64TargetParser.h. - list AppleM4 = [HasV8_7aOps, FeatureCrypto, FeatureFPARMv8, + // Technically apple-m4 is ARMv9.2a, but a quirk of LLVM defines v9.0 as + // requiring SVE, which is optional according to the Arm ARM and not + // supported by the core. ARMv8.7a is the next closest choice. + list AppleM4 = [HasV8_7aOps, FeatureSHA2, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureSHA3, FeatureFullFP16, FeatureFP16FML, FeatureAES, FeatureBF16, - FeatureSME2, + FeatureSME, FeatureSME2, FeatureSMEF64F64, FeatureSMEI16I64]; - list ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureCrypto, + list ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeaturePerfMon]; - list ExynosM4 = [HasV8_2aOps, FeatureCrypto, FeatureDotProd, + list ExynosM4 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd, FeatureFullFP16, FeaturePerfMon]; - list Falkor = [HasV8_0aOps, FeatureCRC, FeatureCrypto, + list Falkor = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureRDM]; - list NeoverseE1 = [HasV8_2aOps, FeatureCrypto, FeatureDotProd, + list NeoverseE1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureNEON, FeatureRCPC, FeatureSSBS, FeaturePerfMon]; - list NeoverseN1 = [HasV8_2aOps, FeatureCrypto, FeatureDotProd, + list NeoverseN1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureNEON, FeatureRCPC, FeatureSPE, FeatureSSBS, FeaturePerfMon]; list NeoverseN2 = [HasV9_0aOps, FeatureBF16, FeatureETE, FeatureFP16FML, FeatureMatMulInt8, FeatureMTE, FeatureSVE2, FeatureSVE2BitPerm, FeatureTRBE, - FeaturePerfMon]; + FeaturePerfMon, + FeatureDotProd, FeatureFullFP16, FeatureSB, FeatureSSBS, FeatureSVE]; list NeoverseN3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML, FeatureFullFP16, FeatureMTE, FeaturePerfMon, FeatureRandGen, FeatureSPE, FeatureSPE_EEF, - FeatureSVE2BitPerm]; + FeatureSVE2BitPerm, + FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM]; list Neoverse512TVB = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist, - FeatureCrypto, FeatureFPARMv8, FeatureFP16FML, + FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML, FeatureFullFP16, FeatureMatMulInt8, FeatureNEON, FeaturePerfMon, FeatureRandGen, FeatureSPE, - FeatureSSBS, FeatureSVE]; + FeatureSSBS, FeatureSVE, + FeatureSHA3, FeatureSM4, FeatureDotProd]; list NeoverseV1 = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist, - FeatureCrypto, FeatureFPARMv8, FeatureFP16FML, + FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML, FeatureFullFP16, FeatureMatMulInt8, FeatureNEON, FeaturePerfMon, FeatureRandGen, FeatureSPE, - FeatureSSBS, FeatureSVE]; + FeatureSSBS, FeatureSVE, + FeatureSHA3, FeatureSM4, FeatureDotProd]; list NeoverseV2 = [HasV9_0aOps, FeatureBF16, FeatureSPE, FeaturePerfMon, FeatureETE, FeatureMatMulInt8, FeatureNEON, FeatureSVE2BitPerm, FeatureFP16FML, - FeatureMTE, FeatureRandGen]; + FeatureMTE, FeatureRandGen, + FeatureSVE, FeatureSVE2, FeatureSSBS, FeatureFullFP16, FeatureDotProd]; list NeoverseV3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML, FeatureFullFP16, FeatureLS64, FeatureMTE, FeaturePerfMon, FeatureRandGen, FeatureSPE, - FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE]; + FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE, + FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM]; list NeoverseV3AE = [HasV9_2aOps, FeatureETE, FeatureFP16FML, FeatureFullFP16, FeatureLS64, FeatureMTE, FeaturePerfMon, FeatureRandGen, FeatureSPE, - FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE]; - list Saphira = [HasV8_4aOps, FeatureCrypto, FeatureFPARMv8, + FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE, + FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM]; + list Saphira = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureSPE, FeaturePerfMon]; - list ThunderX = [HasV8_0aOps, FeatureCRC, FeatureCrypto, + list ThunderX = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeaturePerfMon, FeatureNEON]; - list ThunderX2T99 = [HasV8_1aOps, FeatureCRC, FeatureCrypto, + list ThunderX2T99 = [HasV8_1aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureLSE]; - list ThunderX3T110 = [HasV8_3aOps, FeatureCRC, FeatureCrypto, + list ThunderX3T110 = [HasV8_3aOps, FeatureCRC, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeatureLSE, FeaturePAuth, FeaturePerfMon]; - list TSV110 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8, + list TSV110 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureNEON, FeaturePerfMon, FeatureSPE, FeatureFullFP16, FeatureFP16FML, FeatureDotProd, FeatureJS, FeatureComplxNum]; list Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon, FeatureSSBS, FeatureRandGen, FeatureSB, - FeatureSHA2, FeatureSHA3, FeatureAES]; + FeatureSHA2, FeatureSHA3, FeatureAES, + FeatureFullFP16]; list Ampere1A = [HasV8_6aOps, FeatureNEON, FeaturePerfMon, FeatureMTE, FeatureSSBS, FeatureRandGen, FeatureSB, FeatureSM4, FeatureSHA2, - FeatureSHA3, FeatureAES]; + FeatureSHA3, FeatureAES, + FeatureFullFP16]; list Ampere1B = [HasV8_7aOps, FeatureNEON, FeaturePerfMon, FeatureMTE, FeatureSSBS, FeatureRandGen, FeatureSB, FeatureSM4, FeatureSHA2, @@ -879,9 +906,10 @@ def ProcessorFeatures { FeatureWFxT, FeatureFullFP16]; list Oryon = [HasV8_6aOps, FeatureNEON, FeaturePerfMon, - FeatureCrypto, FeatureRandGen, + FeatureRandGen, FeaturePAuth, FeatureSM4, FeatureSHA2, - FeatureSHA3, FeatureAES]; + FeatureSHA3, FeatureAES, + FeatureSPE]; // 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/TargetParser/AArch64TargetParser.cpp b/llvm/lib/TargetParser/AArch64TargetParser.cpp index ca356ec82bf1f9..f09949849528cb 100644 --- a/llvm/lib/TargetParser/AArch64TargetParser.cpp +++ b/llvm/lib/TargetParser/AArch64TargetParser.cpp @@ -30,9 +30,6 @@ static unsigned checkArchVersion(llvm::StringRef Arch) { } const AArch64::ArchInfo *AArch64::getArchForCpu(StringRef CPU) { - if (CPU == "generic") - return &ARMV8A; - // Note: this now takes cpu aliases into account std::optional Cpu = parseCpu(CPU); if (!Cpu) diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp index 78efa6e5332c41..a99ef85fbfc814 100644 --- a/llvm/unittests/TargetParser/TargetParserTest.cpp +++ b/llvm/unittests/TargetParser/TargetParserTest.cpp @@ -1094,27 +1094,28 @@ INSTANTIATE_TEST_SUITE_P( "cortex-a34", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a35", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a53", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a55", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RAS, - AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC}), + AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, + AArch64::AEK_SHA2, AArch64::AEK_FP, + AArch64::AEK_SIMD, AArch64::AEK_RAS, + AArch64::AEK_LSE, AArch64::AEK_RDM, + AArch64::AEK_FP16, AArch64::AEK_DOTPROD, + AArch64::AEK_RCPC, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a510", "armv9-a", "neon-fp-armv8", @@ -1129,7 +1130,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_MTE, AArch64::AEK_SSBS, AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SB, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "cortex-a520", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1145,7 +1146,8 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, - AArch64::AEK_JSCVT, AArch64::AEK_FCMA}), + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-a520ae", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1161,13 +1163,14 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, - AArch64::AEK_JSCVT, AArch64::AEK_FCMA}), + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-a57", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a65", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1175,7 +1178,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC, - AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS}), + AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a65ae", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1183,27 +1187,29 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC, - AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS}), + AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a72", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a73", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "cortex-a75", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RAS, - AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC}), + AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, + AArch64::AEK_SHA2, AArch64::AEK_FP, + AArch64::AEK_SIMD, AArch64::AEK_RAS, + AArch64::AEK_LSE, AArch64::AEK_RDM, + AArch64::AEK_FP16, AArch64::AEK_DOTPROD, + AArch64::AEK_RCPC, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a76", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1211,7 +1217,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS}), + AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a76ae", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1219,7 +1226,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS}), + AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a77", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1227,7 +1235,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, - AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS}), + AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a78", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1236,7 +1245,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE}), + AArch64::AEK_PROFILE, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a78ae", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1245,7 +1254,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE}), + AArch64::AEK_PROFILE, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a78c", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1255,7 +1264,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_FP16, AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, AArch64::AEK_PROFILE, AArch64::AEK_FLAGM, - AArch64::AEK_PAUTH}), + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-a710", "armv9-a", "neon-fp-armv8", @@ -1270,7 +1279,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, AArch64::AEK_SB, AArch64::AEK_I8MM, AArch64::AEK_BF16, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "cortex-a715", "armv9-a", "neon-fp-armv8", @@ -1287,7 +1296,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_PREDRES, AArch64::AEK_PROFILE, AArch64::AEK_FP16FML, AArch64::AEK_FP16, AArch64::AEK_FLAGM, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "cortex-a720", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1304,7 +1313,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-a720ae", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1321,7 +1330,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-a725", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1343,15 +1352,19 @@ INSTANTIATE_TEST_SUITE_P( ARMCPUTestParams( "neoverse-v1", "armv8.4-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_RAS, AArch64::AEK_SVE, AArch64::AEK_SSBS, - AArch64::AEK_RCPC, AArch64::AEK_CRC, AArch64::AEK_FP, - AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, - AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, - AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3, - AArch64::AEK_SM4, AArch64::AEK_FP16, AArch64::AEK_BF16, - AArch64::AEK_PROFILE, AArch64::AEK_RAND, AArch64::AEK_FP16FML, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_RAS, AArch64::AEK_SVE, + AArch64::AEK_SSBS, AArch64::AEK_RCPC, + AArch64::AEK_CRC, AArch64::AEK_FP, + AArch64::AEK_SIMD, AArch64::AEK_RAS, + AArch64::AEK_LSE, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, + AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_SM4, + AArch64::AEK_FP16, AArch64::AEK_BF16, + AArch64::AEK_PROFILE, AArch64::AEK_RAND, + AArch64::AEK_FP16FML, AArch64::AEK_I8MM, + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.4-A"), ARMCPUTestParams( "neoverse-v2", "armv9-a", "neon-fp-armv8", @@ -1367,7 +1380,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP16FML, AArch64::AEK_I8MM, AArch64::AEK_SVE2BITPERM, AArch64::AEK_RAND, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "neoverse-v3", "armv9.2-a", "neon-fp-armv8", @@ -1386,7 +1399,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_PERFMON, AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "neoverse-v3ae", "armv9.2-a", "neon-fp-armv8", @@ -1405,7 +1418,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_PERFMON, AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-r82", "armv8-r", "crypto-neon-fp-armv8", @@ -1436,7 +1449,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PROFILE}), + AArch64::AEK_PROFILE, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-x1c", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1445,7 +1458,8 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16, AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS, - AArch64::AEK_PAUTH, AArch64::AEK_PROFILE, AArch64::AEK_FLAGM}), + AArch64::AEK_PAUTH, AArch64::AEK_PROFILE, AArch64::AEK_FLAGM, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "cortex-x2", "armv9-a", "neon-fp-armv8", @@ -1460,7 +1474,8 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SVE2BITPERM, AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_FLAGM, - AArch64::AEK_JSCVT, AArch64::AEK_FCMA}), + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "cortex-x3", "armv9-a", "neon-fp-armv8", @@ -1477,7 +1492,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_PREDRES, AArch64::AEK_FLAGM, AArch64::AEK_SSBS, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "cortex-x4", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1494,7 +1509,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA}), + AArch64::AEK_FCMA, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "cortex-x925", "armv9.2-a", "crypto-neon-fp-armv8", @@ -1515,40 +1530,42 @@ INSTANTIATE_TEST_SUITE_P( "9.2-A"), ARMCPUTestParams( "cyclone", "armv8-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "apple-a7", "armv8-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "apple-a8", "armv8-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "apple-a9", "armv8-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "apple-a10", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_RDM, AArch64::AEK_SIMD}), + AArch64::AEK_RDM, AArch64::AEK_SIMD, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "apple-a11", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_FP, AArch64::AEK_LSE, AArch64::AEK_RAS, - AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_FP16}), + AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, + AArch64::AEK_SHA2, AArch64::AEK_FP, + AArch64::AEK_LSE, AArch64::AEK_RAS, + AArch64::AEK_RDM, AArch64::AEK_SIMD, + AArch64::AEK_FP16, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "apple-a12", "armv8.3-a", "crypto-neon-fp-armv8", @@ -1557,7 +1574,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_FP16, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.3-A"), ARMCPUTestParams( "apple-s4", "armv8.3-a", "crypto-neon-fp-armv8", @@ -1566,7 +1583,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_FP16, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.3-A"), ARMCPUTestParams( "apple-s5", "armv8.3-a", "crypto-neon-fp-armv8", @@ -1575,7 +1592,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_FP16, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.3-A"), ARMCPUTestParams( "apple-a13", "armv8.4-a", "crypto-neon-fp-armv8", @@ -1585,82 +1602,92 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA, AArch64::AEK_PAUTH}), + AArch64::AEK_FCMA, AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.4-A"), ARMCPUTestParams( "apple-a14", "armv8.4-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA, AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_AES, + AArch64::AEK_SHA2, AArch64::AEK_SHA3, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, + AArch64::AEK_RDM, AArch64::AEK_RCPC, + AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON, + AArch64::AEK_PREDRES, AArch64::AEK_SB, + AArch64::AEK_SSBS}), "8.4-A"), ARMCPUTestParams( "apple-m1", "armv8.4-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA, AArch64::AEK_PAUTH}), - "8.4-A"), + {AArch64::AEK_CRC, AArch64::AEK_AES, + AArch64::AEK_SHA2, AArch64::AEK_SHA3, + AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, + AArch64::AEK_RDM, AArch64::AEK_RCPC, + AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON, + AArch64::AEK_PREDRES, AArch64::AEK_SB, + AArch64::AEK_SSBS}), + "8.6-A"), ARMCPUTestParams( "apple-a15", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "apple-m2", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "apple-a16", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), - "8.6-A"), + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), + "8.4-A"), ARMCPUTestParams( "apple-m3", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "apple-a17", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, - AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, - AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, - AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "apple-m4", "armv8.7-a", "crypto-neon-fp-armv8", @@ -1675,41 +1702,43 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH, AArch64::AEK_SME, AArch64::AEK_SME2, - AArch64::AEK_SMEF64F64, AArch64::AEK_SMEI16I64}), - "8.7-A"), + AArch64::AEK_SMEF64F64, AArch64::AEK_SMEI16I64, + AArch64::AEK_PERFMON}), + "8.3-A"), ARMCPUTestParams( "exynos-m3", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "exynos-m4", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, - AArch64::AEK_FP, AArch64::AEK_FP16, - AArch64::AEK_LSE, AArch64::AEK_RAS, - AArch64::AEK_RDM, AArch64::AEK_SIMD}), + AArch64::ExtensionBitset( + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "exynos-m5", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, - AArch64::AEK_FP, AArch64::AEK_FP16, - AArch64::AEK_LSE, AArch64::AEK_RAS, - AArch64::AEK_RDM, AArch64::AEK_SIMD}), + AArch64::ExtensionBitset( + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, + AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM, + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "falkor", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD, AArch64::AEK_RDM}), + AArch64::AEK_SIMD, AArch64::AEK_RDM, + AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "kryo", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD}), + AArch64::AEK_SIMD, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "neoverse-e1", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1717,7 +1746,8 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC, - AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS}), + AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "neoverse-n1", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1726,7 +1756,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16, AArch64::AEK_LSE, AArch64::AEK_PROFILE, AArch64::AEK_RAS, AArch64::AEK_RCPC, AArch64::AEK_RDM, AArch64::AEK_SIMD, - AArch64::AEK_SSBS}), + AArch64::AEK_SSBS, AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "neoverse-n2", "armv9-a", "crypto-neon-fp-armv8", @@ -1741,7 +1771,7 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SVE2BITPERM, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH, - AArch64::AEK_FP16FML}), + AArch64::AEK_FP16FML, AArch64::AEK_PERFMON}), "9-A"), ARMCPUTestParams( "neoverse-n3", "armv9.2-a", "neon-fp-armv8", @@ -1759,30 +1789,30 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_RAND, AArch64::AEK_SVE2BITPERM, AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, - AArch64::AEK_JSCVT}), + AArch64::AEK_JSCVT, AArch64::AEK_PERFMON}), "9.2-A"), ARMCPUTestParams( "ampere1", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16, - AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, - AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, - AArch64::AEK_SHA3, AArch64::AEK_BF16, AArch64::AEK_SHA2, - AArch64::AEK_AES, AArch64::AEK_I8MM, AArch64::AEK_SSBS, - AArch64::AEK_SB, AArch64::AEK_RAND, AArch64::AEK_JSCVT, - AArch64::AEK_FCMA, AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16, + AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, + AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, + AArch64::AEK_SHA3, AArch64::AEK_BF16, AArch64::AEK_SHA2, + AArch64::AEK_AES, AArch64::AEK_I8MM, AArch64::AEK_SSBS, + AArch64::AEK_SB, AArch64::AEK_RAND, AArch64::AEK_JSCVT, + AArch64::AEK_FCMA, AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "ampere1a", "armv8.6-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16, - AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, - AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, - AArch64::AEK_SM4, AArch64::AEK_SHA3, AArch64::AEK_BF16, - AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_I8MM, - AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_RAND, - AArch64::AEK_MTE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16, + AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, + AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, + AArch64::AEK_SM4, AArch64::AEK_SHA3, AArch64::AEK_BF16, + AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_I8MM, + AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_RAND, + AArch64::AEK_MTE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.6-A"), ARMCPUTestParams( "ampere1b", "armv8.7-a", "crypto-neon-fp-armv8", @@ -1794,20 +1824,25 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_I8MM, AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_RAND, AArch64::AEK_MTE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH, AArch64::AEK_CSSC}), + AArch64::AEK_PAUTH, AArch64::AEK_CSSC, AArch64::AEK_PERFMON, + AArch64::AEK_WFXT}), "8.7-A"), ARMCPUTestParams( "neoverse-512tvb", "armv8.4-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset( - {AArch64::AEK_RAS, AArch64::AEK_SVE, AArch64::AEK_SSBS, - AArch64::AEK_RCPC, AArch64::AEK_CRC, AArch64::AEK_FP, - AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, - AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, - AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3, - AArch64::AEK_SM4, AArch64::AEK_FP16, AArch64::AEK_BF16, - AArch64::AEK_PROFILE, AArch64::AEK_RAND, AArch64::AEK_FP16FML, - AArch64::AEK_I8MM, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, - AArch64::AEK_PAUTH}), + {AArch64::AEK_RAS, AArch64::AEK_SVE, + AArch64::AEK_SSBS, AArch64::AEK_RCPC, + AArch64::AEK_CRC, AArch64::AEK_FP, + AArch64::AEK_SIMD, AArch64::AEK_RAS, + AArch64::AEK_LSE, AArch64::AEK_RDM, + AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, + AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_SHA3, AArch64::AEK_SM4, + AArch64::AEK_FP16, AArch64::AEK_BF16, + AArch64::AEK_PROFILE, AArch64::AEK_RAND, + AArch64::AEK_FP16FML, AArch64::AEK_I8MM, + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, + AArch64::AEK_PAUTH, AArch64::AEK_PERFMON}), "8.4-A"), ARMCPUTestParams( "thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8", @@ -1822,31 +1857,32 @@ INSTANTIATE_TEST_SUITE_P( {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_RCPC, - AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH}), + AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH, + AArch64::AEK_PERFMON}), "8.3-A"), ARMCPUTestParams( "thunderx", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SIMD, - AArch64::AEK_FP}), + AArch64::AEK_FP, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "thunderxt81", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SIMD, - AArch64::AEK_FP}), + AArch64::AEK_FP, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "thunderxt83", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SIMD, - AArch64::AEK_FP}), + AArch64::AEK_FP, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "thunderxt88", "armv8-a", "crypto-neon-fp-armv8", AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SIMD, - AArch64::AEK_FP}), + AArch64::AEK_FP, AArch64::AEK_PERFMON}), "8-A"), ARMCPUTestParams( "tsv110", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1855,15 +1891,16 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_DOTPROD}), + AArch64::AEK_FP16FML, AArch64::AEK_DOTPROD, + AArch64::AEK_PERFMON}), "8.2-A"), ARMCPUTestParams( "a64fx", "armv8.2-a", "crypto-neon-fp-armv8", - AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES, - AArch64::AEK_SHA2, AArch64::AEK_FP, - AArch64::AEK_SIMD, AArch64::AEK_FP16, - AArch64::AEK_RAS, AArch64::AEK_LSE, - AArch64::AEK_SVE, AArch64::AEK_RDM}), + AArch64::ExtensionBitset( + {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2, + AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_FP16, + AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_SVE, + AArch64::AEK_RDM, AArch64::AEK_PERFMON, AArch64::AEK_FCMA}), "8.2-A"), ARMCPUTestParams( "carmel", "armv8.2-a", "crypto-neon-fp-armv8", @@ -1881,13 +1918,13 @@ INSTANTIATE_TEST_SUITE_P( AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_SM4, AArch64::AEK_SHA3, AArch64::AEK_BF16, AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_I8MM, AArch64::AEK_RAND, - AArch64::AEK_PROFILE, AArch64::AEK_CRYPTO})), + AArch64::AEK_PROFILE, AArch64::AEK_PERFMON})), "8.6-A")), ARMCPUTestParams::PrintToStringParamName); // Note: number of CPUs includes aliases. -static constexpr unsigned NumAArch64CPUArchs = 80; +static constexpr unsigned NumAArch64CPUArchs = 81; TEST(TargetParserTest, testAArch64CPUArchList) { SmallVector List; diff --git a/llvm/utils/TableGen/ARMTargetDefEmitter.cpp b/llvm/utils/TableGen/ARMTargetDefEmitter.cpp index 5efa7d2722d3f9..5f5e014892138f 100644 --- a/llvm/utils/TableGen/ARMTargetDefEmitter.cpp +++ b/llvm/utils/TableGen/ARMTargetDefEmitter.cpp @@ -71,6 +71,10 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) { OS << "ARM_ARCHITECTURE(" << Arch << ")\n"; OS << "\n#undef ARM_ARCHITECTURE\n\n"; + // Currently only AArch64 (not ARM) is handled beyond this point. + if (!RK.getClass("Architecture64")) + return; + // Emit the ArchExtKind enum OS << "#ifdef EMIT_ARCHEXTKIND_ENUM\n" << "enum ArchExtKind : unsigned {\n" @@ -137,6 +141,14 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) { // Emit architecture information OS << "#ifdef EMIT_ARCHITECTURES\n"; + // Return the C++ name of the of an ArchInfo object + auto ArchInfoName = [](int Major, int Minor, + StringRef Profile) -> std::string { + return Minor == 0 ? "ARMV" + std::to_string(Major) + Profile.upper() + : "ARMV" + std::to_string(Major) + "_" + + std::to_string(Minor) + Profile.upper(); + }; + auto Architectures = RK.getAllDerivedDefinitionsIfDefined("Architecture64"); std::vector CppSpellings; for (const Record *Rec : Architectures) { @@ -151,10 +163,7 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) { ProfileLower + "'"); // Name of the object in C++ - const std::string CppSpelling = - Minor == 0 ? "ARMV" + std::to_string(Major) + ProfileUpper.c_str() - : "ARMV" + std::to_string(Major) + "_" + - std::to_string(Minor) + ProfileUpper.c_str(); + const std::string CppSpelling = ArchInfoName(Major, Minor, ProfileUpper); OS << "inline constexpr ArchInfo " << CppSpelling << " = {\n"; CppSpellings.push_back(CppSpelling); @@ -175,7 +184,6 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) { // Construct the list of default extensions OS << " (AArch64::ExtensionBitset({"; for (auto *E : Rec->getValueAsListOfDefs("DefaultExts")) { - // Only process subclasses of Extension OS << "AArch64::" << E->getValueAsString("ArchExtKindSpelling").upper() << ", "; } @@ -195,6 +203,70 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) { OS << "#undef EMIT_ARCHITECTURES\n" << "#endif // EMIT_ARCHITECTURES\n" << "\n"; + + // Emit CPU information + OS << "#ifdef EMIT_CPU_INFO\n" + << "inline constexpr CpuInfo CpuInfos[] = {\n"; + + for (const Record *Rec : RK.getAllDerivedDefinitions("ProcessorModel")) { + auto Name = Rec->getValueAsString("Name"); + auto Features = Rec->getValueAsListOfDefs("Features"); + + // "apple-latest" is backend-only, should not be accepted by TargetParser. + if (Name == "apple-latest") + continue; + + Record *Arch; + if (Name == "generic") { + // "generic" is an exception. It does not have an architecture, and there + // are tests that depend on e.g. -mattr=-v8.4a meaning HasV8_0aOps==false. + // However, in TargetParser CPUInfo, it is written as 8.0-A. + Arch = RK.getDef("HasV8_0aOps"); + } else { + // Search for an Architecture64 in the list of features. + auto IsArch = [](Record *F) { return F->isSubClassOf("Architecture64"); }; + auto ArchIter = llvm::find_if(Features, IsArch); + if (ArchIter == Features.end()) + PrintFatalError(Rec, "Features must include an Architecture64."); + Arch = *ArchIter; + + // Check there is only one Architecture in the list. + if (llvm::count_if(Features, IsArch) > 1) + PrintFatalError(Rec, "Features has multiple Architecture64 entries"); + } + + auto Major = Arch->getValueAsInt("Major"); + auto Minor = Arch->getValueAsInt("Minor"); + auto Profile = Arch->getValueAsString("Profile"); + auto ArchInfo = ArchInfoName(Major, Minor, Profile); + + // The apple-latest alias is backend only, do not expose it to -mcpu. + if (Name == "apple-latest") + continue; + + OS << " {\n" + << " \"" << Name << "\",\n" + << " " << ArchInfo << ",\n" + << " AArch64::ExtensionBitset({\n"; + + // Keep track of extensions we have seen + StringSet<> SeenExts; + for (auto *E : Rec->getValueAsListOfDefs("Features")) + // Only process subclasses of Extension + if (E->isSubClassOf("Extension")) { + const auto AEK = E->getValueAsString("ArchExtKindSpelling").upper(); + if (!SeenExts.insert(AEK).second) + PrintFatalError(Rec, "feature already added: " + E->getName()); + OS << " AArch64::" << AEK << ",\n"; + } + OS << " })\n" + << " },\n"; + } + OS << "};\n"; + + OS << "#undef EMIT_CPU_INFO\n" + << "#endif // EMIT_CPU_INFO\n" + << "\n"; } static TableGen::Emitter::Opt