Skip to content

Commit f85494f

Browse files
[AArch64] Define apple-m5/a19 CPUs. (#171187)
A19 and M5 have been released in fall 2025. They add several features on top of M4/A18: - MTE, CSSC, HBC - SME2p1, SMEB16B16, SMEF16F16 - SPECRES2 This also bumps apple-latest to apple-m5.
1 parent bfce025 commit f85494f

File tree

7 files changed

+122
-3
lines changed

7 files changed

+122
-3
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// REQUIRES: aarch64-registered-target
2+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=apple-m5 | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s
3+
4+
// CHECK: Extensions enabled for the given AArch64 target
5+
// CHECK-EMPTY:
6+
// CHECK-NEXT: Architecture Feature(s) Description
7+
// CHECK-NEXT: FEAT_AES, FEAT_PMULL Enable AES support
8+
// CHECK-NEXT: FEAT_AMUv1 Enable Armv8.4-A Activity Monitors extension
9+
// CHECK-NEXT: FEAT_AMUv1p1 Enable Armv8.6-A Activity Monitors Virtualization support
10+
// CHECK-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
11+
// CHECK-NEXT: FEAT_BF16 Enable BFloat16 Extension
12+
// CHECK-NEXT: FEAT_BTI Enable Branch Target Identification
13+
// CHECK-NEXT: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
14+
// CHECK-NEXT: FEAT_CSSC Enable Common Short Sequence Compression (CSSC) instructions
15+
// CHECK-NEXT: FEAT_CSV2_2 Enable architectural speculation restriction
16+
// CHECK-NEXT: FEAT_DIT Enable Armv8.4-A Data Independent Timing instructions
17+
// CHECK-NEXT: FEAT_DPB Enable Armv8.2-A data Cache Clean to Point of Persistence
18+
// CHECK-NEXT: FEAT_DPB2 Enable Armv8.5-A Cache Clean to Point of Deep Persistence
19+
// CHECK-NEXT: FEAT_DotProd Enable dot product support
20+
// CHECK-NEXT: FEAT_ECV Enable enhanced counter virtualization extension
21+
// CHECK-NEXT: FEAT_FCMA Enable Armv8.3-A Floating-point complex number support
22+
// CHECK-NEXT: FEAT_FGT Enable fine grained virtualization traps extension
23+
// CHECK-NEXT: FEAT_FHM Enable FP16 FML instructions
24+
// CHECK-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
25+
// CHECK-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
26+
// CHECK-NEXT: FEAT_FPAC Enable Armv8.3-A Pointer Authentication Faulting enhancement
27+
// CHECK-NEXT: FEAT_FRINTTS Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int
28+
// CHECK-NEXT: FEAT_FlagM Enable Armv8.4-A Flag Manipulation instructions
29+
// CHECK-NEXT: FEAT_FlagM2 Enable alternative NZCV format for floating point comparisons
30+
// CHECK-NEXT: FEAT_HBC Enable Armv8.8-A Hinted Conditional Branches Extension
31+
// CHECK-NEXT: FEAT_HCX Enable Armv8.7-A HCRX_EL2 system register
32+
// CHECK-NEXT: FEAT_I8MM Enable Matrix Multiply Int8 Extension
33+
// CHECK-NEXT: FEAT_JSCVT Enable Armv8.3-A JavaScript FP conversion instructions
34+
// CHECK-NEXT: FEAT_LOR Enable Armv8.1-A Limited Ordering Regions extension
35+
// CHECK-NEXT: FEAT_LRCPC Enable support for RCPC extension
36+
// CHECK-NEXT: FEAT_LRCPC2 Enable Armv8.4-A RCPC instructions with Immediate Offsets
37+
// CHECK-NEXT: FEAT_LSE Enable Armv8.1-A Large System Extension (LSE) atomic instructions
38+
// CHECK-NEXT: FEAT_LSE2 Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules
39+
// FIXME: Apple M5 does not have FEAT_MPAM, but it is currently marked as
40+
// non-optional in llvm's understanding of Armv8.4-A
41+
// CHECK-NEXT: FEAT_MPAM Enable Armv8.4-A Memory system Partitioning and Monitoring extension
42+
// CHECK-NEXT: FEAT_MTE, FEAT_MTE2 Enable Memory Tagging Extension
43+
// CHECK-NEXT: FEAT_NV, FEAT_NV2 Enable Armv8.4-A Nested Virtualization Enchancement
44+
// CHECK-NEXT: FEAT_PAN Enable Armv8.1-A Privileged Access-Never extension
45+
// CHECK-NEXT: FEAT_PAN2 Enable Armv8.2-A PAN s1e1R and s1e1W Variants
46+
// CHECK-NEXT: FEAT_PAuth Enable Armv8.3-A Pointer Authentication extension
47+
// CHECK-NEXT: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
48+
// CHECK-NEXT: FEAT_RAS, FEAT_RASv1p1 Enable Armv8.0-A Reliability, Availability and Serviceability Extensions
49+
// CHECK-NEXT: FEAT_RDM Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions
50+
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
51+
// FIXME: Apple M5 does not have FEAT_SEL2, but it is currently marked as
52+
// non-optional in llvm's understanding of Armv8.4-A
53+
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
54+
// CHECK-NEXT: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
55+
// CHECK-NEXT: FEAT_SHA3, FEAT_SHA512 Enable SHA512 and SHA3 support
56+
// CHECK-NEXT: FEAT_SME Enable Scalable Matrix Extension (SME)
57+
// CHECK-NEXT: FEAT_SME2 Enable Scalable Matrix Extension 2 (SME2) instructions
58+
// CHECK-NEXT: FEAT_SME2p1 Enable Scalable Matrix Extension 2.1 instructions
59+
// CHECK-NEXT: FEAT_SME_B16B16 Enable SME2.1 ZA-targeting non-widening BFloat16 instructions
60+
// CHECK-NEXT: FEAT_SME_F16F16 Enable SME non-widening Float16 instructions
61+
// CHECK-NEXT: FEAT_SME_F64F64 Enable Scalable Matrix Extension (SME) F64F64 instructions
62+
// CHECK-NEXT: FEAT_SME_I16I64 Enable Scalable Matrix Extension (SME) I16I64 instructions
63+
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
64+
// CHECK-NEXT: FEAT_SPECRES2 Enable Speculation Restriction Instruction
65+
// CHECK-NEXT: FEAT_SVE_B16B16 Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions
66+
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
67+
// CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension
68+
// CHECK-NEXT: FEAT_UAO Enable Armv8.2-A UAO PState
69+
// CHECK-NEXT: FEAT_VHE Enable Armv8.1-A Virtual Host extension
70+
// CHECK-NEXT: FEAT_WFxT Enable Armv8.7-A WFET and WFIT instruction
71+
// CHECK-NEXT: FEAT_XS Enable Armv8.7-A limited-TLB-maintenance instruction

clang/test/Driver/print-supported-cpus-aarch64.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
// CHECK: apple-a16
1616
// CHECK: apple-a17
1717
// CHECK: apple-a18
18+
// CHECK: apple-a19
1819
// CHECK: apple-a7
1920
// CHECK: apple-a8
2021
// CHECK: apple-a9
2122
// CHECK: apple-m1
2223
// CHECK: apple-m2
2324
// CHECK: apple-m3
2425
// CHECK: apple-m4
26+
// CHECK: apple-m5
2527
// CHECK: apple-s10
2628
// CHECK: apple-s4
2729
// CHECK: apple-s5

clang/test/Misc/target-invalid-cpu-note/aarch64.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
// CHECK-SAME: {{^}}, apple-a16
2121
// CHECK-SAME: {{^}}, apple-a17
2222
// CHECK-SAME: {{^}}, apple-a18
23+
// CHECK-SAME: {{^}}, apple-a19
2324
// CHECK-SAME: {{^}}, apple-a7
2425
// CHECK-SAME: {{^}}, apple-a8
2526
// CHECK-SAME: {{^}}, apple-a9
2627
// CHECK-SAME: {{^}}, apple-m1
2728
// CHECK-SAME: {{^}}, apple-m2
2829
// CHECK-SAME: {{^}}, apple-m3
2930
// CHECK-SAME: {{^}}, apple-m4
31+
// CHECK-SAME: {{^}}, apple-m5
3032
// CHECK-SAME: {{^}}, apple-s10
3133
// CHECK-SAME: {{^}}, apple-s4
3234
// CHECK-SAME: {{^}}, apple-s5

llvm/lib/Target/AArch64/AArch64Processors.td

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,26 @@ def TuneAppleM4 : SubtargetFeature<"apple-m4", "ARMProcFamily", "AppleM4",
517517
FeatureNoZCZeroingFPR64,
518518
FeatureZCZeroingFPR128]>;
519519

520+
def TuneAppleM5 : SubtargetFeature<"apple-m5", "ARMProcFamily", "AppleM5",
521+
"Apple M5", [
522+
FeatureAlternateSExtLoadCVTF32Pattern,
523+
FeatureArithmeticBccFusion,
524+
FeatureArithmeticCbzFusion,
525+
FeatureDisableLatencySchedHeuristic,
526+
FeatureFuseAddress,
527+
FeatureFuseAdrpAdd,
528+
FeatureFuseAES,
529+
FeatureFuseArithmeticLogic,
530+
FeatureFuseCmpCSel,
531+
FeatureFuseCryptoEOR,
532+
FeatureFuseLiterals,
533+
FeatureZCRegMoveGPR64,
534+
FeatureZCRegMoveFPR128,
535+
FeatureZCZeroingGPR32,
536+
FeatureZCZeroingGPR64,
537+
FeatureNoZCZeroingFPR64,
538+
FeatureZCZeroingFPR128]>;
539+
520540
def TuneExynosM3 : SubtargetFeature<"exynosm3", "ARMProcFamily", "ExynosM3",
521541
"Samsung Exynos-M3 processors",
522542
[FeatureExynosCheapAsMoveHandling,
@@ -1061,6 +1081,22 @@ def ProcessorFeatures {
10611081
FeatureLSE, FeaturePAuth, FeatureFPAC,
10621082
FeatureRAS, FeatureRCPC, FeatureRDM,
10631083
FeatureDotProd, FeatureMatMulInt8];
1084+
1085+
list<SubtargetFeature> AppleM5 = [HasV8_7aOps, FeatureSHA2, FeatureFPARMv8,
1086+
FeatureNEON, FeaturePerfMon, FeatureSHA3,
1087+
FeatureFullFP16, FeatureFP16FML,
1088+
FeatureAES, FeatureBF16,
1089+
FeatureWFxT,
1090+
FeatureSME, FeatureSME2,
1091+
FeatureSMEF64F64, FeatureSMEI16I64,
1092+
FeatureComplxNum, FeatureCRC, FeatureJS,
1093+
FeatureLSE, FeaturePAuth, FeatureFPAC,
1094+
FeatureRAS, FeatureRCPC, FeatureRDM,
1095+
FeatureDotProd, FeatureMatMulInt8,
1096+
FeatureMTE, FeatureCSSC, FeatureHBC,
1097+
FeatureSME2p1, FeatureSMEB16B16, FeatureSMEF16F16,
1098+
FeatureSPECRES2];
1099+
10641100
list<SubtargetFeature> ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
10651101
FeaturePerfMon, FeatureNEON, FeatureFPARMv8];
10661102
list<SubtargetFeature> ExynosM4 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
@@ -1380,8 +1416,12 @@ def : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
13801416
[TuneAppleM4]>;
13811417
def : ProcessorAlias<"apple-a18", "apple-m4">;
13821418

1419+
def : ProcessorModel<"apple-m5", CycloneModel, ProcessorFeatures.AppleM5,
1420+
[TuneAppleM5]>;
1421+
def : ProcessorAlias<"apple-a19", "apple-m5">;
1422+
13831423
// Alias for the latest Apple processor model supported by LLVM.
1384-
def : ProcessorAlias<"apple-latest", "apple-m4">;
1424+
def : ProcessorAlias<"apple-latest", "apple-m5">;
13851425

13861426

13871427
// Fujitsu A64FX

llvm/lib/Target/AArch64/AArch64Subtarget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
218218
case AppleA16:
219219
case AppleA17:
220220
case AppleM4:
221+
case AppleM5:
221222
CacheLineSize = 64;
222223
PrefetchDistance = 280;
223224
MinPrefetchStride = 2048;

llvm/lib/Target/AArch64/AArch64Subtarget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
178178
case AppleA16:
179179
case AppleA17:
180180
case AppleM4:
181+
case AppleM5:
181182
return true;
182183
default:
183184
return false;

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,7 @@ INSTANTIATE_TEST_SUITE_P(
11441144
AArch64CPUTestParams("apple-a17", "armv8.6-a"),
11451145
AArch64CPUTestParams("apple-m4", "armv8.7-a"),
11461146
AArch64CPUTestParams("apple-a18", "armv8.7-a"),
1147+
AArch64CPUTestParams("apple-m5", "armv8.7-a"),
11471148
AArch64CPUTestParams("exynos-m3", "armv8-a"),
11481149
AArch64CPUTestParams("exynos-m4", "armv8.2-a"),
11491150
AArch64CPUTestParams("exynos-m5", "armv8.2-a"),
@@ -1260,11 +1261,12 @@ INSTANTIATE_TEST_SUITE_P(
12601261
AArch64CPUAliasTestParams({"apple-a15", "apple-m2"}),
12611262
AArch64CPUAliasTestParams({"apple-a16", "apple-m3",
12621263
"apple-s9", "apple-s10"}),
1263-
AArch64CPUAliasTestParams({"apple-m4", "apple-a18"})),
1264+
AArch64CPUAliasTestParams({"apple-m4", "apple-a18"}),
1265+
AArch64CPUAliasTestParams({"apple-m5", "apple-a19"})),
12641266
AArch64CPUAliasTestParams::PrintToStringParamName);
12651267

12661268
// Note: number of CPUs includes aliases.
1267-
static constexpr unsigned NumAArch64CPUArchs = 91;
1269+
static constexpr unsigned NumAArch64CPUArchs = 93;
12681270

12691271
TEST(TargetParserTest, testAArch64CPUArchList) {
12701272
SmallVector<StringRef, NumAArch64CPUArchs> List;

0 commit comments

Comments
 (0)