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; diff --git a/clang/test/Driver/aarch64-features.c b/clang/test/Driver/aarch64-features.c index 11c7343544345..2267a7e22d307 100644 --- a/clang/test/Driver/aarch64-features.c +++ b/clang/test/Driver/aarch64-features.c @@ -36,13 +36,13 @@ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s // RUN: %clang --target=aarch64 -rtlib=compiler-rt \ -// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s +// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s // RUN: %clang --target=aarch64-apple-darwin -rtlib=compiler-rt \ -// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s +// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s // RUN: %clang --target=aarch64-windows-gnu -rtlib=compiler-rt \ -// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s +// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s // RUN: %clang --target=aarch64-unknown-openbsd -rtlib=compiler-rt \ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s @@ -51,18 +51,10 @@ // RUN: --gcc-toolchain=%S/Inputs/aarch64-linux-gnu-tree/gcc-10 \ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s -// RUN: %clang --target=aarch64-linux-gnu -rtlib=libgcc \ -// RUN: --gcc-toolchain=%S/Inputs/aarch64-linux-gnu-tree/gcc-7.5.0 \ -// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s - // RUN: %clang --target=aarch64-linux-gnu -rtlib=libgcc \ // RUN: --gcc-toolchain=%S/Inputs/aarch64-linux-gnu-tree/gcc-9.3.1 \ // RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-ON %s -// RUN: %clang --target=aarch64-linux-gnu -rtlib=libgcc \ -// RUN: --gcc-toolchain=%S/Inputs/aarch64-linux-gnu-tree/gcc-9.3.0 \ -// RUN: -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-OUTLINE-ATOMICS-OFF %s - // RUN: %clang --target=arm64-linux -rtlib=compiler-rt -mno-outline-atomics \ // RUN: -### -c %s 2>&1 | FileCheck \ // RUN: -check-prefixes=CHECK-OUTLINE-ATOMICS-OFF,CHECK-NO-OUTLINE-ATOMICS %s