[clang] ab2b175 - [flang] Link to libatomic with openmp and rtlib=libgcc (#112202)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 16 06:49:02 PDT 2024
Author: David Truby
Date: 2024-10-16T14:48:59+01:00
New Revision: ab2b17512cda90305d5bea77b8e8fa119ab78f25
URL: https://github.com/llvm/llvm-project/commit/ab2b17512cda90305d5bea77b8e8fa119ab78f25
DIFF: https://github.com/llvm/llvm-project/commit/ab2b17512cda90305d5bea77b8e8fa119ab78f25.diff
LOG: [flang] Link to libatomic with openmp and rtlib=libgcc (#112202)
Currently when using OpenMP atomics we depend on some symbols from
libatomic. These symbols are provided in a separate library for the
libgcc runtime, so we should link to that when rtlib=libgcc.
For the compiler-rt case, the presence and location of the symbols is
dependent on how compiler-rt itself was built so we cannot make that
decision for the user. As such no extra flags are added in that case.
Added:
flang/test/Driver/atomic.f90
Modified:
clang/lib/Driver/ToolChains/CommonArgs.cpp
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 3dd86ab7b99ca9..e662c3f0d2fa8f 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1294,6 +1294,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
CmdArgs.push_back("-lFortranRuntime");
CmdArgs.push_back("-lFortranDecimal");
}
+
+ // libomp needs libatomic for atomic operations if using libgcc
+ if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ,
+ options::OPT_fno_openmp, false)) {
+ Driver::OpenMPRuntimeKind OMPRuntime =
+ TC.getDriver().getOpenMPRuntime(Args);
+ ToolChain::RuntimeLibType RuntimeLib = TC.GetRuntimeLibType(Args);
+ if (OMPRuntime == Driver::OMPRT_OMP && RuntimeLib == ToolChain::RLT_Libgcc)
+ CmdArgs.push_back("-latomic");
+ }
}
void tools::addFortranRuntimeLibraryPath(const ToolChain &TC,
diff --git a/flang/test/Driver/atomic.f90 b/flang/test/Driver/atomic.f90
new file mode 100644
index 00000000000000..0fb3b428f694c1
--- /dev/null
+++ b/flang/test/Driver/atomic.f90
@@ -0,0 +1,5 @@
+!RUN: %flang --target=aarch64-unknown-linux-gnu -fuse-ld=ld -fopenmp -rtlib=libgcc -### %s 2>&1 | FileCheck --check-prefixes=GCC %s
+!RUN: %flang --target=aarch64-unknown-linux-gnu -fuse-ld=ld -fopenmp -rtlib=compiler-rt -### %s 2>&1 | FileCheck --check-prefixes=CRT %s
+
+!GCC: -latomic
+!CRT-NOT: -latomic
More information about the cfe-commits
mailing list