diff options
| author | Wei Mi <wmi@google.com> | 2017-09-22 16:30:00 +0000 |
|---|---|---|
| committer | Wei Mi <wmi@google.com> | 2017-09-22 16:30:00 +0000 |
| commit | b086289787d62278089502d222135e098171715b (patch) | |
| tree | 4526d8f35bdefab105c4fcdbb12b33eef0466fd4 /clang/lib/Basic | |
| parent | b2eda767fe162173bd611376226ab92d018fec69 (diff) | |
| download | bcm5719-llvm-b086289787d62278089502d222135e098171715b.tar.gz bcm5719-llvm-b086289787d62278089502d222135e098171715b.zip | |
[Atomic][X8664] set max atomic inline width according to the target
This is to fix PR31620. MaxAtomicInlineWidth is set to 128 for x86_64. However
for target without cx16 support, 128 atomic operation will generate __sync_*
libcalls. The patch set MaxAtomicInlineWidth to 64 if the target doesn't support
cx16.
Differential Revision: https://reviews.llvm.org/D38046
llvm-svn: 313992
Diffstat (limited to 'clang/lib/Basic')
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets/X86.h | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 3c1c08bb057..a9a5f4ddcfb 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -620,6 +620,7 @@ TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, Target->setSupportedOpenCLOpts(); Target->setOpenCLExtensionOpts(); + Target->setMaxAtomicWidth(); if (!Target->validateTarget(Diags)) return nullptr; diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 21ae4ff4e67..a08eeec59dc 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -814,7 +814,7 @@ public: // x86-64 has atomics up to 16 bytes. MaxAtomicPromoteWidth = 128; - MaxAtomicInlineWidth = 128; + MaxAtomicInlineWidth = 64; } BuiltinVaListKind getBuiltinVaListKind() const override { @@ -872,6 +872,12 @@ public: HasSizeMismatch); } + void setMaxAtomicWidth() override { + if (hasFeature("cx16")) + MaxAtomicInlineWidth = 128; + return; + } + ArrayRef<Builtin::Info> getTargetBuiltins() const override; }; |

