Skip to content

Commit 61d547e

Browse files
committed
[Clang][AArch64][ARM] PMUv3 Option Added
An option has been added to Clang to enable or disable the PMU v3 architecture extension. Differential Revision: https://reviews.llvm.org/D116748
1 parent 4dedd82 commit 61d547e

File tree

5 files changed

+27
-11
lines changed

5 files changed

+27
-11
lines changed

clang/test/Driver/aarch64-perfmon.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.4a+pmuv3 %s 2>&1 | FileCheck --check-prefix=CHECK-PERFMON %s
2+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.2a+pmuv3 %s 2>&1 | FileCheck --check-prefix=CHECK-PERFMON %s
3+
// CHECK-PERFMON: "-target-feature" "+perfmon"
4+
5+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.4a+nopmuv3 %s 2>&1 | FileCheck --check-prefix=CHECK-NOPERFMON %s
6+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.2a+nopmuv3 %s 2>&1 | FileCheck --check-prefix=CHECK-NOPERFMON %s
7+
// CHECK-NOPERFMON: "-target-feature" "-perfmon"
8+
9+
// RUN: %clang -### -target aarch64-none-none-eabi %s 2>&1 | FileCheck %s --check-prefix=ABSENTPERFMON
10+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.4a %s 2>&1 | FileCheck %s --check-prefix=ABSENTPERFMON
11+
// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.2a %s 2>&1 | FileCheck %s --check-prefix=ABSENTPERFMON
12+
// ABSENTPERFMON-NOT: "-target-feature" "+perfmon"
13+
// ABSENTPERFMON-NOT: "-target-feature" "-perfmon"

llvm/include/llvm/Support/AArch64TargetParser.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ AARCH64_ARCH_EXT_NAME("sme-f64", AArch64::AEK_SMEF64, "+sme-f64",
146146
AARCH64_ARCH_EXT_NAME("sme-i64", AArch64::AEK_SMEI64, "+sme-i64", "-sme-i64")
147147
AARCH64_ARCH_EXT_NAME("hbc", AArch64::AEK_HBC, "+hbc", "-hbc")
148148
AARCH64_ARCH_EXT_NAME("mops", AArch64::AEK_MOPS, "+mops", "-mops")
149+
AARCH64_ARCH_EXT_NAME("pmuv3", AArch64::AEK_PERFMON, "+perfmon", "-perfmon")
149150
#undef AARCH64_ARCH_EXT_NAME
150151

151152
#ifndef AARCH64_CPU_NAME

llvm/include/llvm/Support/AArch64TargetParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ enum ArchExtKind : uint64_t {
7171
AEK_SMEI64 = 1ULL << 39,
7272
AEK_HBC = 1ULL << 40,
7373
AEK_MOPS = 1ULL << 41,
74+
AEK_PERFMON = 1ULL << 42,
7475
};
7576

7677
enum class ArchKind {

llvm/lib/Support/AArch64TargetParser.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ bool AArch64::getExtensionFeatures(uint64_t Extensions,
118118
Features.push_back("+hbc");
119119
if (Extensions & AArch64::AEK_MOPS)
120120
Features.push_back("+mops");
121+
if (Extensions & AArch64::AEK_PERFMON)
122+
Features.push_back("+perfmon");
121123

122124
return true;
123125
}

llvm/unittests/Support/TargetParserTest.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,17 +1428,14 @@ TEST(TargetParserTest, testAArch64Extension) {
14281428

14291429
TEST(TargetParserTest, AArch64ExtensionFeatures) {
14301430
std::vector<uint64_t> Extensions = {
1431-
AArch64::AEK_CRC, AArch64::AEK_CRYPTO,
1432-
AArch64::AEK_FP, AArch64::AEK_SIMD,
1433-
AArch64::AEK_FP16, AArch64::AEK_PROFILE,
1434-
AArch64::AEK_RAS, AArch64::AEK_LSE,
1435-
AArch64::AEK_RDM, AArch64::AEK_DOTPROD,
1436-
AArch64::AEK_SVE, AArch64::AEK_SVE2,
1437-
AArch64::AEK_SVE2AES, AArch64::AEK_SVE2SM4,
1438-
AArch64::AEK_SVE2SHA3, AArch64::AEK_SVE2BITPERM,
1439-
AArch64::AEK_RCPC, AArch64::AEK_FP16FML,
1440-
AArch64::AEK_SME, AArch64::AEK_SMEF64,
1441-
AArch64::AEK_SMEI64 };
1431+
AArch64::AEK_CRC, AArch64::AEK_CRYPTO, AArch64::AEK_FP,
1432+
AArch64::AEK_SIMD, AArch64::AEK_FP16, AArch64::AEK_PROFILE,
1433+
AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM,
1434+
AArch64::AEK_DOTPROD, AArch64::AEK_SVE, AArch64::AEK_SVE2,
1435+
AArch64::AEK_SVE2AES, AArch64::AEK_SVE2SM4, AArch64::AEK_SVE2SHA3,
1436+
AArch64::AEK_SVE2BITPERM, AArch64::AEK_RCPC, AArch64::AEK_FP16FML,
1437+
AArch64::AEK_SME, AArch64::AEK_SMEF64, AArch64::AEK_SMEI64,
1438+
AArch64::AEK_PERFMON};
14421439

14431440
std::vector<StringRef> Features;
14441441

@@ -1473,6 +1470,7 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
14731470
EXPECT_TRUE(llvm::is_contained(Features, "+sme"));
14741471
EXPECT_TRUE(llvm::is_contained(Features, "+sme-f64"));
14751472
EXPECT_TRUE(llvm::is_contained(Features, "+sme-i64"));
1473+
EXPECT_TRUE(llvm::is_contained(Features, "+perfmon"));
14761474
}
14771475

14781476
TEST(TargetParserTest, AArch64ArchFeatures) {
@@ -1520,6 +1518,7 @@ TEST(TargetParserTest, AArch64ArchExtFeature) {
15201518
{"sme-i64", "nosme-i64", "+sme-i64", "-sme-i64"},
15211519
{"hbc", "nohbc", "+hbc", "-hbc"},
15221520
{"mops", "nomops", "+mops", "-mops"},
1521+
{"pmuv3", "nopmuv3", "+perfmon", "-perfmon"},
15231522
};
15241523

15251524
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) {

0 commit comments

Comments
 (0)