Skip to content

Commit 051deb2

Browse files
committed
[ARM] add Armv9 build attribute
The build attribute number can be found in the Arm ABI addenda32 document: https://github.com/ARM-software/abi-aa/blob/main/addenda32/addenda32.rst#335target-related-attributes Reviewed By: tmatheson Differential Revision: https://reviews.llvm.org/D124090
1 parent 2b833d4 commit 051deb2

File tree

7 files changed

+42
-30
lines changed

7 files changed

+42
-30
lines changed

llvm/include/llvm/Support/ARMBuildAttributes.h

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -90,25 +90,26 @@ enum AttrType : unsigned {
9090

9191
// Legal Values for CPU_arch, (=6), uleb128
9292
enum CPUArch {
93-
Pre_v4 = 0,
94-
v4 = 1, // e.g. SA110
95-
v4T = 2, // e.g. ARM7TDMI
96-
v5T = 3, // e.g. ARM9TDMI
97-
v5TE = 4, // e.g. ARM946E_S
98-
v5TEJ = 5, // e.g. ARM926EJ_S
99-
v6 = 6, // e.g. ARM1136J_S
100-
v6KZ = 7, // e.g. ARM1176JZ_S
101-
v6T2 = 8, // e.g. ARM1156T2_S
102-
v6K = 9, // e.g. ARM1176JZ_S
103-
v7 = 10, // e.g. Cortex A8, Cortex M3
104-
v6_M = 11, // e.g. Cortex M1
105-
v6S_M = 12, // v6_M with the System extensions
106-
v7E_M = 13, // v7_M with DSP extensions
107-
v8_A = 14, // v8_A AArch32
108-
v8_R = 15, // e.g. Cortex R52
109-
v8_M_Base= 16, // v8_M_Base AArch32
110-
v8_M_Main= 17, // v8_M_Main AArch32
111-
v8_1_M_Main=21, // v8_1_M_Main AArch32
93+
Pre_v4 = 0,
94+
v4 = 1, // e.g. SA110
95+
v4T = 2, // e.g. ARM7TDMI
96+
v5T = 3, // e.g. ARM9TDMI
97+
v5TE = 4, // e.g. ARM946E_S
98+
v5TEJ = 5, // e.g. ARM926EJ_S
99+
v6 = 6, // e.g. ARM1136J_S
100+
v6KZ = 7, // e.g. ARM1176JZ_S
101+
v6T2 = 8, // e.g. ARM1156T2_S
102+
v6K = 9, // e.g. ARM1176JZ_S
103+
v7 = 10, // e.g. Cortex A8, Cortex M3
104+
v6_M = 11, // e.g. Cortex M1
105+
v6S_M = 12, // v6_M with the System extensions
106+
v7E_M = 13, // v7_M with DSP extensions
107+
v8_A = 14, // v8_A AArch32
108+
v8_R = 15, // e.g. Cortex R52
109+
v8_M_Base = 16, // v8_M_Base AArch32
110+
v8_M_Main = 17, // v8_M_Main AArch32
111+
v8_1_M_Main = 21, // v8_1_M_Main AArch32
112+
v9_A = 22, // v9_A AArch32
112113
};
113114

114115
enum CPUArchProfile { // (=7), uleb128

llvm/include/llvm/Support/ARMTargetParser.def

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,22 +129,22 @@ ARM_ARCH("armv8.8-a", ARMV8_8A, "8.8-A", "v8.8a",
129129
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 | ARM::AEK_AES |
130130
ARM::AEK_I8MM))
131131
ARM_ARCH("armv9-a", ARMV9A, "9-A", "v9a",
132-
ARMBuildAttrs::CPUArch::v8_A, FK_NEON_FP_ARMV8,
132+
ARMBuildAttrs::CPUArch::v9_A, FK_NEON_FP_ARMV8,
133133
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
134134
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
135135
ARM::AEK_DOTPROD))
136136
ARM_ARCH("armv9.1-a", ARMV9_1A, "9.1-A", "v9.1a",
137-
ARMBuildAttrs::CPUArch::v8_A, FK_NEON_FP_ARMV8,
137+
ARMBuildAttrs::CPUArch::v9_A, FK_NEON_FP_ARMV8,
138138
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
139139
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
140140
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
141141
ARM_ARCH("armv9.2-a", ARMV9_2A, "9.2-A", "v9.2a",
142-
ARMBuildAttrs::CPUArch::v8_A, FK_NEON_FP_ARMV8,
142+
ARMBuildAttrs::CPUArch::v9_A, FK_NEON_FP_ARMV8,
143143
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
144144
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
145145
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
146146
ARM_ARCH("armv9.3-a", ARMV9_3A, "9.3-A", "v9.3a",
147-
ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
147+
ARMBuildAttrs::CPUArch::v9_A, FK_CRYPTO_NEON_FP_ARMV8,
148148
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
149149
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
150150
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))

llvm/lib/Object/ELFObjectFile.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,9 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {
574574
case ARMBuildAttrs::v8_1_M_Main:
575575
Triple += "v8.1m.main";
576576
break;
577+
case ARMBuildAttrs::v9_A:
578+
Triple += "v9a";
579+
break;
577580
}
578581
}
579582
if (!isLittleEndian())

llvm/lib/Support/ARMAttributeParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Error ARMAttributeParser::CPU_arch(AttrType tag) {
8787
"ARM v6KZ", "ARM v6T2", "ARM v6K", "ARM v7", "ARM v6-M", "ARM v6S-M",
8888
"ARM v7E-M", "ARM v8", nullptr,
8989
"ARM v8-M Baseline", "ARM v8-M Mainline", nullptr, nullptr, nullptr,
90-
"ARM v8.1-M Mainline"
90+
"ARM v8.1-M Mainline", "ARM v9-A"
9191
};
9292
return parseStringAttribute("CPU_arch", tag, makeArrayRef(strings));
9393
}

llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ static ARMBuildAttrs::CPUArch getArchForCPU(const MCSubtargetInfo &STI) {
122122
if (STI.getCPU() == "xscale")
123123
return ARMBuildAttrs::v5TEJ;
124124

125-
if (STI.hasFeature(ARM::HasV8Ops)) {
125+
if (STI.hasFeature(ARM::HasV9_0aOps))
126+
return ARMBuildAttrs::v9_A;
127+
else if (STI.hasFeature(ARM::HasV8Ops)) {
126128
if (STI.hasFeature(ARM::FeatureRClass))
127129
return ARMBuildAttrs::v8_R;
128130
return ARMBuildAttrs::v8_A;

llvm/unittests/Support/ARMAttributeParser.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ bool testTagString(unsigned Tag, const char *name) {
5454

5555
TEST(ARMAttributeParser, UnknownCPU_arch) {
5656
static const uint8_t bytes[] = {'A', 15, 0, 0, 0, 'a', 'e', 'a', 'b',
57-
'i', 0, 1, 7, 0, 0, 0, 6, 22};
58-
testParseError(bytes, "unknown CPU_arch value: 22");
57+
'i', 0, 1, 7, 0, 0, 0, 6, 23};
58+
testParseError(bytes, "unknown CPU_arch value: 23");
5959
}
6060

6161
TEST(CPUArchBuildAttr, testBuildAttr) {
@@ -99,6 +99,9 @@ TEST(CPUArchBuildAttr, testBuildAttr) {
9999
ARMBuildAttrs::v8_M_Main));
100100
EXPECT_TRUE(testBuildAttr(6, 21, ARMBuildAttrs::CPU_arch,
101101
ARMBuildAttrs::v8_1_M_Main));
102+
EXPECT_TRUE(testBuildAttr(6, 22, ARMBuildAttrs::CPU_arch,
103+
ARMBuildAttrs::v9_A));
104+
102105
}
103106

104107
TEST(CPUArchProfileBuildAttr, testBuildAttr) {

llvm/unittests/Support/TargetParserTest.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,13 +513,16 @@ TEST(TargetParserTest, testARMArch) {
513513
ARMBuildAttrs::CPUArch::v8_A));
514514
EXPECT_TRUE(
515515
testARMArch("armv9-a", "generic", "v9a",
516-
ARMBuildAttrs::CPUArch::v8_A));
516+
ARMBuildAttrs::CPUArch::v9_A));
517517
EXPECT_TRUE(
518518
testARMArch("armv9.1-a", "generic", "v9.1a",
519-
ARMBuildAttrs::CPUArch::v8_A));
519+
ARMBuildAttrs::CPUArch::v9_A));
520520
EXPECT_TRUE(
521521
testARMArch("armv9.2-a", "generic", "v9.2a",
522-
ARMBuildAttrs::CPUArch::v8_A));
522+
ARMBuildAttrs::CPUArch::v9_A));
523+
EXPECT_TRUE(
524+
testARMArch("armv9.3-a", "generic", "v9.3a",
525+
ARMBuildAttrs::CPUArch::v9_A));
523526
EXPECT_TRUE(
524527
testARMArch("armv8-r", "cortex-r52", "v8r",
525528
ARMBuildAttrs::CPUArch::v8_R));

0 commit comments

Comments
 (0)