This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Better info for combine results in worse code generated


On Sat, May 30, 2015 at 10:47:27AM +0930, Alan Modra wrote:
> > > > I think this is too simplistic though.  For example, AND with -7 is not
> > > > zero-extended (rlwinm rD,rA,0,31,28 sets the high 32 bits of rD to the low
> > > > 32 bits of rA).
> > > 
> > > We take some pains in rs6000.md to ensure that the wrap-around case
> > > for rlwinm does not occur for TARGET_POWERPC64.
> > 
> > I consider that a bug; it pessimises code.
> 
> At the time I added the checks for wrap-around, I recall that gcc
> generated wrong code without the fix.

It still does: some of the things that use mask_operand cannot handle
a wrapped around (MB > ME) 32-bit mask in DImode.

> > > You'll find that an
> > > SImode AND with any value is in fact zero extending.
> > 
> > int f(int x) { return x & 0xc0000000; }
> > 
> > is a counter-example with current trunk (it does a rldicr).
> 
> Huh, that does look like you've destroyed my claim about SImode AND.

Carefully worded :-)


I don't think it is a good idea to optimise code based on assumptions
of what SImode SETs will do to the dest seen as DImode, without making
those assumptions explicit in the RTL.


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]