summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2015-05-08 13:07:48 +0000
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2015-05-08 13:07:48 +0000
commit531a656cf01fe9cd4bc78f3a4411f1acff8f2347 (patch)
tree48898610c4bc821e4e03c0b0b09e445f6b2f8ce3 /clang/lib
parent3e493037be9c6a0df47c609a924f613726fe4175 (diff)
downloadbcm5719-llvm-531a656cf01fe9cd4bc78f3a4411f1acff8f2347.tar.gz
bcm5719-llvm-531a656cf01fe9cd4bc78f3a4411f1acff8f2347.zip
Fix for bug 23429.
The macros for gcc atomic compare and swaps are defined for Power8 CPU's since the functionality is provided in the back end. llvm-svn: 236848
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Basic/Targets.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 283d1d2ae22..b39cd1eea5b 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -1207,6 +1207,14 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
Builder.defineMacro("__CRYPTO__");
if (HasHTM)
Builder.defineMacro("__HTM__");
+ if (getTriple().getArch() == llvm::Triple::ppc64le ||
+ (defs & ArchDefinePwr8)) {
+ Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
+ Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
+ Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
+ if (PointerWidth == 64)
+ Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
+ }
// FIXME: The following are not yet generated here by Clang, but are
// generated by GCC:
OpenPOWER on IntegriCloud