[clang] [AArch64] Bump default CPUs for iOS 26/watchOS 26 to A12/S6. (PR #152235)
Ahmed Bougacha via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 6 10:06:30 PDT 2025
https://github.com/ahmedbougacha updated https://github.com/llvm/llvm-project/pull/152235
>From 16b2542900c5599a87e4a6b02ec3e08dff1d2730 Mon Sep 17 00:00:00 2001
From: Ahmed Bougacha <ahmed at bougacha.org>
Date: Tue, 5 Aug 2025 15:20:18 -0700
Subject: [PATCH 1/2] [AArch64] Bump default CPUs for iOS 26/watchOS 26 to
A12/S6.
iOS 26/watchOS 26 deprecate some devices, allowing the default CPU to be
raised based on the deployment target.
watchOS 26 also introduces arm64 (vs. arm64_32/arm64e).
The defaults are now:
- arm64-apple-ios26 apple-a12
- arm64-apple-watchos26 apple-s6
- arm64_32-apple-watchos26 apple-s6
- arm64e-apple-watchos26 apple-s6
Left unchanged are:
- arm64-apple-tvos26 apple-a7
- arm64e-apple-tvos26 apple-a12
- arm64e-apple-ios26 apple-a12
- arm64_32-apple-watchos11 apple-s4
While there, rewrite an outdated comment in a related Mac test.
---
clang/lib/Driver/ToolChains/Arch/AArch64.cpp | 16 ++++++++++++++
.../Driver/aarch64-cpu-defaults-appleos26.c | 22 +++++++++++++++++++
clang/test/Driver/aarch64-mac-cpus.c | 2 +-
3 files changed, 39 insertions(+), 1 deletion(-)
create mode 100644 clang/test/Driver/aarch64-cpu-defaults-appleos26.c
diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
index 418f9fd9ca4c4..98f5efbe5652f 100644
--- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
@@ -52,6 +52,22 @@ std::string aarch64::getAArch64TargetCPU(const ArgList &Args,
return "apple-m1";
}
+ if (Triple.getOS() == llvm::Triple::IOS) {
+ assert(!Triple.isSimulatorEnvironment() && "iossim should be mac-like");
+ // iOS 26 only runs on apple-a12 and later CPUs.
+ if (!Triple.isOSVersionLT(26))
+ return "apple-a12";
+ }
+
+ if (Triple.isWatchOS()) {
+ assert(!Triple.isSimulatorEnvironment() && "watchossim should be mac-like");
+ // arm64_32/arm64e watchOS requires S4 before watchOS 26, S6 after.
+ if (Triple.getArch() == llvm::Triple::aarch64_32 || Triple.isArm64e())
+ return Triple.isOSVersionLT(26) ? "apple-s4" : "apple-s6";
+ // arm64 (non-e, non-32) watchOS comes later, and requires S6 anyway.
+ return "apple-s6";
+ }
+
if (Triple.isXROS()) {
// The xrOS simulator runs on M1 as well, it should have been covered above.
assert(!Triple.isSimulatorEnvironment() && "xrossim should be mac-like");
diff --git a/clang/test/Driver/aarch64-cpu-defaults-appleos26.c b/clang/test/Driver/aarch64-cpu-defaults-appleos26.c
new file mode 100644
index 0000000000000..7ad460ee86fcf
--- /dev/null
+++ b/clang/test/Driver/aarch64-cpu-defaults-appleos26.c
@@ -0,0 +1,22 @@
+/// iOS 26 and watchOS 26 bump the default arm64 CPU targets.
+
+/// arm64 iOS 26 defaults to apple-a12. arm64e already did.
+// RUN: %clang -target arm64-apple-ios26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A12
+// RUN: %clang -target arm64e-apple-ios26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A12
+
+// arm64e/arm64_32 watchOS 26 default to apple-s6.
+// RUN: %clang -target arm64e-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
+// RUN: %clang -target arm64_32-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
+
+// arm64 is new in watchOS 26, and defaults to apple-s6.
+// RUN: %clang -target arm64-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
+
+/// llvm usually treats tvOS like iOS, but it runs on different hardware.
+// RUN: %clang -target arm64-apple-tvos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A7
+// RUN: %clang -target arm64e-apple-tvos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A12
+
+/// Simulators are tested with other Mac-like targets in aarch64-mac-cpus.c.
+
+// A12: "-target-cpu" "apple-a12"
+// S6: "-target-cpu" "apple-s6"
+// A7: "-target-cpu" "apple-a7"
diff --git a/clang/test/Driver/aarch64-mac-cpus.c b/clang/test/Driver/aarch64-mac-cpus.c
index 8d23ad8c956fd..1aef1ae285e86 100644
--- a/clang/test/Driver/aarch64-mac-cpus.c
+++ b/clang/test/Driver/aarch64-mac-cpus.c
@@ -1,4 +1,4 @@
-// arm64 Mac-based targets default to Apple A13.
+// arm64/arm64e Mac-based targets default to Apple M1.
// RUN: %clang --target=arm64-apple-macos -### -c %s 2>&1 | FileCheck %s
// RUN: %clang --target=arm64-apple-ios-macabi -### -c %s 2>&1 | FileCheck %s
>From 34cfb56ef6205b552e8be18d68fb0bfcdd85fe94 Mon Sep 17 00:00:00 2001
From: Ahmed Bougacha <ahmed at bougacha.org>
Date: Wed, 6 Aug 2025 10:02:22 -0700
Subject: [PATCH 2/2] Fix test comment formatting.
---
clang/test/Driver/aarch64-cpu-defaults-appleos26.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/test/Driver/aarch64-cpu-defaults-appleos26.c b/clang/test/Driver/aarch64-cpu-defaults-appleos26.c
index 7ad460ee86fcf..99176050bf5ae 100644
--- a/clang/test/Driver/aarch64-cpu-defaults-appleos26.c
+++ b/clang/test/Driver/aarch64-cpu-defaults-appleos26.c
@@ -4,11 +4,11 @@
// RUN: %clang -target arm64-apple-ios26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A12
// RUN: %clang -target arm64e-apple-ios26 -### -c %s 2>&1 | FileCheck %s --check-prefix=A12
-// arm64e/arm64_32 watchOS 26 default to apple-s6.
+/// arm64e/arm64_32 watchOS 26 default to apple-s6.
// RUN: %clang -target arm64e-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
// RUN: %clang -target arm64_32-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
-// arm64 is new in watchOS 26, and defaults to apple-s6.
+/// arm64 is new in watchOS 26, and defaults to apple-s6.
// RUN: %clang -target arm64-apple-watchos26 -### -c %s 2>&1 | FileCheck %s --check-prefix=S6
/// llvm usually treats tvOS like iOS, but it runs on different hardware.
More information about the cfe-commits
mailing list