svn commit: r337979 - projects/clang700-import/contrib/llvm/tools/clang/lib/Basic/Targets
Antoine Brodin
antoine at freebsd.org
Sun Oct 7 09:06:22 UTC 2018
On Fri, Aug 17, 2018 at 6:26 PM Dimitry Andric <dim at freebsd.org> wrote:
> Author: dim
> Date: Fri Aug 17 16:25:59 2018
> New Revision: 337979
> URL: https://svnweb.freebsd.org/changeset/base/337979
>
> Log:
> For now, revert upstream clang r323281 (by Wei Mi):
>
> Adjust MaxAtomicInlineWidth for i386/i486 targets.
>
> This is to fix the bug reported in
> https://bugs.llvm.org/show_bug.cgi?id=34347#c6. Currently, all
> MaxAtomicInlineWidth of x86-32 targets are set to 64. However, i386
> doesn't support any cmpxchg related instructions. i486 only supports
> cmpxchg. So in this patch MaxAtomicInlineWidth is reset as follows:
> For i386, the MaxAtomicInlineWidth should be 0 because no cmpxchg is
> supported. For i486, the MaxAtomicInlineWidth should be 32 because
> it supports cmpxchg. For others 32 bits x86 cpu, the
> MaxAtomicInlineWidth should be 64 because of cmpxchg8b.
>
> Differential Revision: https://reviews.llvm.org/D42154
>
> This should fix buildworld on i386, because of our system libraries
> missing __atomic_load_8, and possibly other 64 bit atomic functions, for
> that architecture.
>
> We should really fix that at some point, but since we have been actually
> using cmpxchg8b for years now, it does not seem to matter much...
Hi,
Is it possible to backport something similar on stable/11 and maybe do
an EN for 11.2?
Antoine
> Modified:
> projects/clang700-import/contrib/llvm/tools/clang/lib/Basic/Targets/X86.h
>
> Modified: projects/clang700-import/contrib/llvm/tools/clang/lib/Basic/Targets/X86.h
> ==============================================================================
> --- projects/clang700-import/contrib/llvm/tools/clang/lib/Basic/Targets/X86.h Fri Aug 17 16:19:47 2018 (r337978)
> +++ projects/clang700-import/contrib/llvm/tools/clang/lib/Basic/Targets/X86.h Fri Aug 17 16:25:59 2018 (r337979)
> @@ -350,11 +350,9 @@ class LLVM_LIBRARY_VISIBILITY X86_32TargetInfo : publi
> (1 << TargetInfo::LongDouble));
>
> // x86-32 has atomics up to 8 bytes
> - CPUKind Kind = getCPUKind(Opts.CPU);
> - if (Kind >= CK_i586 || Kind == CK_Generic)
> - MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
> - else if (Kind >= CK_i486)
> - MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 32;
> + // FIXME: Check that we actually have cmpxchg8b before setting
> + // MaxAtomicInlineWidth. (cmpxchg8b is an i586 instruction.)
> + MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
> }
>
> BuiltinVaListKind getBuiltinVaListKind() const override {
>
More information about the svn-src-projects
mailing list