- 
                Notifications
    
You must be signed in to change notification settings  - Fork 15.1k
 
[AArch64] Enable out-of-line atomics by default #157241
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
| 
          
 @llvm/pr-subscribers-clang-driver Author: Brad Smith (brad0) ChangesFull diff: https://github.com/llvm/llvm-project/pull/157241.diff 8 Files Affected: 
 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;
 | 
    
| 
          
 @llvm/pr-subscribers-clang Author: Brad Smith (brad0) ChangesFull diff: https://github.com/llvm/llvm-project/pull/157241.diff 8 Files Affected: 
 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;
 | 
    
59cbd31    to
    4e2f477      
    Compare
  
    | 
          
 ✅ With the latest revision this PR passed the C/C++ code formatter.  | 
    
09aad59    to
    7be5a25      
    Compare
  
    7be5a25    to
    de2d938      
    Compare
  
    de2d938    to
    9769f3a      
    Compare
  
    | 
           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.  | 
    
No description provided.