[llvm] r212443 - CodeGen: it turns out that NAND is not the same thing as BIC. At all.

Hal Finkel hfinkel at anl.gov
Mon Jul 7 06:44:40 PDT 2014


----- Original Message -----
> From: "Duncan Sands" <duncan.sands at gmail.com>
> To: llvm-commits at cs.uiuc.edu
> Sent: Monday, July 7, 2014 4:35:37 AM
> Subject: Re: [llvm] r212443 - CodeGen: it turns out that NAND is not the same	thing as BIC. At all.
> 
> Hi Tim,
> 
> On 07/07/14 11:06, Tim Northover wrote:
> > Author: tnorthover
> > Date: Mon Jul  7 04:06:35 2014
> > New Revision: 212443
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=212443&view=rev
> > Log:
> > CodeGen: it turns out that NAND is not the same thing as BIC. At
> > all.
> >
> > We've been performing the wrong operation on ARM for "atomicrmw
> > nand" for
> > years, since "a NAND b" is "~(a & b)" rather than ARM's very
> > tempting "a & ~b".
> > This bled over into the generic expansion pass.
> >
> > So I assume no-one has ever actually tried to do an atomic nand in
> > the real
> > world. Oh well.
> 
> this may have been a feature, not a mistake: it might simply have
> been trying to
> be compatible with GCC which also did a & ~b for atomic nand for
> years (it was
> even documented to be this way).  The semantics were changed to ~(a &
> b) in GCC
> 4.4.  See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37908

Is this a problem, then, because we claim compatibility with gcc 4.2.1? I wonder if this breaks anything in the wild.

 -Hal

> 
> Ciao, Duncan.
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list