Skip to content

Conversation

@brad0
Copy link
Contributor

@brad0 brad0 commented Sep 6, 2025

No description provided.

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' labels Sep 6, 2025
@llvmbot
Copy link
Member

llvmbot commented Sep 6, 2025

@llvm/pr-subscribers-clang-driver

Author: Brad Smith (brad0)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/157241.diff

8 Files Affected:

  • (modified) clang/include/clang/Driver/ToolChain.h (-6)
  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/Fuchsia.h (-5)
  • (modified) clang/lib/Driver/ToolChains/Haiku.h (-5)
  • (modified) clang/lib/Driver/ToolChains/Linux.cpp (-13)
  • (modified) clang/lib/Driver/ToolChains/Linux.h (-1)
  • (modified) clang/lib/Driver/ToolChains/Managarm.h (-5)
  • (modified) clang/lib/Driver/ToolChains/OpenBSD.h (-5)
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..14a6e9e87b445 100644
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -47,7 +47,6 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
   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;

@llvmbot
Copy link
Member

llvmbot commented Sep 6, 2025

@llvm/pr-subscribers-clang

Author: Brad Smith (brad0)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/157241.diff

8 Files Affected:

  • (modified) clang/include/clang/Driver/ToolChain.h (-6)
  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/Fuchsia.h (-5)
  • (modified) clang/lib/Driver/ToolChains/Haiku.h (-5)
  • (modified) clang/lib/Driver/ToolChains/Linux.cpp (-13)
  • (modified) clang/lib/Driver/ToolChains/Linux.h (-1)
  • (modified) clang/lib/Driver/ToolChains/Managarm.h (-5)
  • (modified) clang/lib/Driver/ToolChains/OpenBSD.h (-5)
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..14a6e9e87b445 100644
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -47,7 +47,6 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
   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;

@brad0 brad0 force-pushed the clang_aarch64_outline_atomics branch from 59cbd31 to 4e2f477 Compare September 6, 2025 07:49
@brad0 brad0 changed the title [AArch64] Enable out-of-line atomics by default. [AArch64] Enable out-of-line atomics by default Sep 6, 2025
@github-actions
Copy link

github-actions bot commented Sep 6, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@brad0 brad0 force-pushed the clang_aarch64_outline_atomics branch 2 times, most recently from 09aad59 to 7be5a25 Compare September 6, 2025 22:38
@brad0 brad0 force-pushed the clang_aarch64_outline_atomics branch from 7be5a25 to de2d938 Compare September 22, 2025 07:47
@brad0 brad0 force-pushed the clang_aarch64_outline_atomics branch from de2d938 to 9769f3a Compare September 22, 2025 07:49
@efriedma-quic
Copy link
Collaborator

Can you briefly describe what configurations this affects? I guess this is removing the check to turn off out-of-line atomics for gcc sysroots? Does this affect baremetal configs?

@brad0
Copy link
Contributor Author

brad0 commented Sep 25, 2025

Can you briefly describe what configurations this affects? I guess this is removing the check to turn off out-of-line atomics for gcc sysroots? Does this affect baremetal configs?

GCC 10.1 has enabled out-of-line atomics by default and I wanted to do something similar. I had not looked into what else was necessary and is why I haven't looked for reviews so far.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants