[clang] [AArch64] Enable out-of-line atomics by default (PR #157241)
Brad Smith via cfe-commits
cfe-commits at lists.llvm.org
Sat Sep 6 00:54:48 PDT 2025
https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/157241
>From 09aad599911545813df9ed898546660eaf008f82 Mon Sep 17 00:00:00 2001
From: Brad Smith <brad at comstyle.com>
Date: Sat, 6 Sep 2025 03:43:30 -0400
Subject: [PATCH] [AArch64] Enable out-of-line atomics by default
---
clang/include/clang/Driver/ToolChain.h | 6 ------
clang/lib/Driver/ToolChains/CommonArgs.cpp | 2 +-
clang/lib/Driver/ToolChains/Fuchsia.h | 5 -----
clang/lib/Driver/ToolChains/Haiku.h | 5 -----
clang/lib/Driver/ToolChains/Linux.cpp | 13 -------------
clang/lib/Driver/ToolChains/Linux.h | 2 --
clang/lib/Driver/ToolChains/Managarm.h | 5 -----
clang/lib/Driver/ToolChains/OpenBSD.h | 5 -----
8 files changed, 1 insertion(+), 42 deletions(-)
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index 1425714d34110..b5943317fc243 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -564,12 +564,6 @@ class ToolChain {
virtual UnwindTableLevel
getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const;
- /// Test whether this toolchain supports outline atomics by default.
- virtual bool
- IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const {
- return false;
- }
-
/// Test whether this toolchain defaults to PIC.
virtual bool isPICDefault() const = 0;
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 299422328aecf..809bf8db357c5 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3054,7 +3054,7 @@ void tools::addOutlineAtomicsArgs(const Driver &D, const ToolChain &TC,
CmdArgs.push_back("-outline-atomics");
}
}
- } else if (Triple.isAArch64() && TC.IsAArch64OutlineAtomicsDefault(Args)) {
+ } else if (Triple.isAArch64()) {
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("+outline-atomics");
}
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.h b/clang/lib/Driver/ToolChains/Fuchsia.h
index 619968f585024..fd9a317a7b5d2 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.h
+++ b/clang/lib/Driver/ToolChains/Fuchsia.h
@@ -90,11 +90,6 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
- bool IsAArch64OutlineAtomicsDefault(
- const llvm::opt::ArgList &Args) const override {
- return true;
- }
-
void
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args,
diff --git a/clang/lib/Driver/ToolChains/Haiku.h b/clang/lib/Driver/ToolChains/Haiku.h
index b4b14cf0aeb99..edebf5c49187b 100644
--- a/clang/lib/Driver/ToolChains/Haiku.h
+++ b/clang/lib/Driver/ToolChains/Haiku.h
@@ -56,11 +56,6 @@ class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF {
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const override;
- bool IsAArch64OutlineAtomicsDefault(
- const llvm::opt::ArgList &Args) const override {
- return true;
- }
-
SanitizerMask getSupportedSanitizers() const override;
unsigned GetDefaultDwarfVersion() const override { return 4; }
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
index 16e35b08cfbd6..944e8f08d8859 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -772,19 +772,6 @@ bool Linux::isPIEDefault(const llvm::opt::ArgList &Args) const {
getTriple().isMusl() || getSanitizerArgs(Args).requiresPIE();
}
-bool Linux::IsAArch64OutlineAtomicsDefault(const ArgList &Args) const {
- // Outline atomics for AArch64 are supported by compiler-rt
- // and libgcc since 9.3.1
- assert(getTriple().isAArch64() && "expected AArch64 target!");
- ToolChain::RuntimeLibType RtLib = GetRuntimeLibType(Args);
- if (RtLib == ToolChain::RLT_CompilerRT)
- return true;
- assert(RtLib == ToolChain::RLT_Libgcc && "unexpected runtime library type!");
- if (GCCInstallation.getVersion().isOlderThan(9, 3, 1))
- return false;
- return true;
-}
-
bool Linux::IsMathErrnoDefault() const {
if (getTriple().isAndroid() || getTriple().isMusl())
return false;
diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h
index 2eb2d05786fe3..87833106e1e0e 100644
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -46,8 +46,6 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
RuntimeLibType GetDefaultRuntimeLibType() const override;
unsigned GetDefaultDwarfVersion() const override;
CXXStdlibType GetDefaultCXXStdlibType() const override;
- bool
- IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override;
bool isPIEDefault(const llvm::opt::ArgList &Args) const override;
bool IsMathErrnoDefault() const override;
SanitizerMask getSupportedSanitizers() const override;
diff --git a/clang/lib/Driver/ToolChains/Managarm.h b/clang/lib/Driver/ToolChains/Managarm.h
index 408c0589a3138..326197eb52bb7 100644
--- a/clang/lib/Driver/ToolChains/Managarm.h
+++ b/clang/lib/Driver/ToolChains/Managarm.h
@@ -35,11 +35,6 @@ class LLVM_LIBRARY_VISIBILITY Managarm : public Generic_ELF {
addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const override;
- bool IsAArch64OutlineAtomicsDefault(
- const llvm::opt::ArgList &Args) const override {
- return true;
- }
-
SanitizerMask getSupportedSanitizers() const override;
std::string computeSysRoot() const override;
diff --git a/clang/lib/Driver/ToolChains/OpenBSD.h b/clang/lib/Driver/ToolChains/OpenBSD.h
index ad0f9e6799568..11b873cb30032 100644
--- a/clang/lib/Driver/ToolChains/OpenBSD.h
+++ b/clang/lib/Driver/ToolChains/OpenBSD.h
@@ -79,11 +79,6 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF {
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const override;
- bool IsAArch64OutlineAtomicsDefault(
- const llvm::opt::ArgList &Args) const override {
- return true;
- }
-
std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component,
FileType Type = ToolChain::FT_Static,
bool IsFortran = false) const override;
More information about the cfe-commits
mailing list