[Bug tree-optimization/56175] Issue with combine phase on x86.

ysrumyan at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Feb 12 14:44:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56175

--- Comment #9 from Yuri Rumyantsev <ysrumyan at gmail dot com> 2013-02-12 14:43:53 UTC ---
(In reply to comment #8)
> (In reply to comment #7)
> > (In reply to comment #6)
> > > (In reply to comment #5)
> > > > This pattern is already recognized by simplify_bitwise_binary but only for
> > > > usual int type, i.e. if we change all short types to the ordinary int (or
> > > > unsigned) this simplification takes place (dump after 1st forwprop):
> > > > 
> > > >   <bb 4>:
> > > >   x_8 = x_2(D) >> 1;
> > > >   y_9 = y_4(D) >> 1;
> > > >   _10 = x_8 & 1;
> > > >   _11 = y_9 & 1;
> > > >   _16 = x_8 ^ y_9;
> > > >   z_12 = _16 & 1;
> > > > 
> > > > i.e. the issue is redundant type conversions:
> > > > 
> > > >   <bb 3>:
> > > >   x_7 = x_2(D) >> 1;
> > > >   y_8 = y_4(D) >> 1;
> > > >   _13 = x_7 & 1;
> > > >   _9 = (signed char) _13;
> > > >   _14 = y_8 & 1;
> > > >   _10 = (signed char) _14;
> > > >   _11 = _9 ^ _10;
> > > > 
> > > > I assume that if we delete these redundant conversions the required
> > > > simplification will happen.
> > > 
> > > Ah, well.  The issue is that we transformed (unsigned char)y & 1
> > > to (unsigned char)(y & 1).
> > 
> > Hi Richard,
> > 
> > We'd like to fix this issue since we can get +10.5% speedup on Atom.
> > What is your opinion on how better to fix this issue with 1st pattern in
> > simplify_bitwise_binary?
> > 
> > I have no idea why gcc does such transformation and what gain we can get from
> > it - decrease size of constant or create more opportunities for cse?
> 
> Well, you'd have to track down what is responsible for that transform.
> 
> Generally promoting operations (and automatic vars) to word-mode may
> be beneficial on most targets.  But that should be done late.
> 
> > I can propose the following possible changes:
> > 
> > 1. Introduce a hook for doing such transformation.
> > 2. Introduce a new forwprop pass that does not do such transformation.
> > 3. Do not perform such transformation for small positive constant.
> > 4. Do not performa such transformation if (type-x) c == c.
> > etc.
> 
> First track it down ;)
> 
> > Any help will be appreciated.
> > Yuri.

Richard,

I am familiar with type promotion transformation that e.g. can transform byte
loop counter to word, but this is done by another phases, e.g. lto.

We found out the owner of this change

http://gcc.gnu.org/ml/gcc-patches/2011-06/msg01988.html 

What our next steps?

Thanks ahead.
Yuri.



More information about the Gcc-bugs mailing list