Pull in r148240 from upstream llvm trunk:

Make sure the non-SSE lowering for fences correctly clobbers EFLAGS.
  PR11768.

In particular, this fixes segfaults during the build of devel/icu on
i386.  The __sync_synchronize() builtin used for implementing icu's
internal barrier could lead to incorrect behaviour.

MFC after:	3 days
This commit is contained in:
Dimitry Andric 2012-01-20 19:18:11 +00:00
parent 475cc570f4
commit 462386c6b1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=230393

View File

@ -533,7 +533,7 @@ def ATOMSWAP6432 : I<0, Pseudo, (outs GR32:$dst1, GR32:$dst2),
// Memory barriers
// TODO: Get this to fold the constant into the instruction.
let isCodeGenOnly = 1 in
let isCodeGenOnly = 1, Defs = [EFLAGS] in
def OR32mrLocked : I<0x09, MRMDestMem, (outs), (ins i32mem:$dst, GR32:$zero),
"lock\n\t"
"or{l}\t{$zero, $dst|$dst, $zero}",