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