Target i586 by default on the i386 architecture, since after upstream's

change https://reviews.llvm.org/rL356631 ("[X86] Add CMPXCHG8B feature
flag. Set it for all CPUs except i386/i486 including 'generic'. Disable
use of CMPXCHG8B when this flag isn't set"), clang now correctly emits
calls to __atomic_load_8, __atomic_store_8, etc. when targeting i486,
and this means we can no longer link most modern programs, because we do
not have a libatomic, nor support for atomic functions in libc.  See
also PR 230888, 220822, 233725, 234976, and more probably duplicates.

Note that in practice, clang has been incorrectly generating cmpxchg8b
instructions for years now, when targeting i486.  So de facto nothing
really changes by doing this.
This commit is contained in:
Dimitry Andric 2019-09-08 10:31:34 +00:00
parent 022d92870f
commit c0e18e70bd
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/clang900-import/; revision=352030

View File

@ -93,10 +93,10 @@ const char *x86::getX86TargetCPU(const ArgList &Args,
return "x86-64";
switch (Triple.getOS()) {
case llvm::Triple::FreeBSD:
case llvm::Triple::NetBSD:
case llvm::Triple::OpenBSD:
return "i486";
return "i486";
case llvm::Triple::FreeBSD:
case llvm::Triple::Haiku:
return "i586";
default: