On Fri, Dec 02, 2011 at 03:33:06PM +1300, Maxim Kuvyrkov wrote:
> I'm looking at a missed optimizations in combine and it is similar to the
> one you've fixed in PR18942
> (http://thread.gmane.org/gmane.comp.gcc.patches/81504).
> 
> I'm trying to make GCC optimize
> (leu:SI
>   (plus:SI (reg:SI) (const_int -1))
>   (const_int 1))
> 
> into
> 
> (leu:SI
>   (reg:SI)
>   (const_int 2))
> .
> 
> Your patch for PR18942 handles only EQ/NE comparisons, and I wonder if
> there is a reason not to handle LEU/GEU, LTU/GTU comparisons as well.  I'm
> a bit fuzzy whether signed comparisons can be optimized here as well, but
> I can't see the problem with unsigned comparisons.

Consider reg:SI being 0?  Then (leu:SI (plus:SI (reg:SI) (const_int -1)) 
(const_int 1))
is 0, but (leu:SI (reg:SI) (const_int 2)) is 1.
You could transform this if you have a guarantee that reg:SI will not be 0
(and, in your general

> Regarding the testcase, the general pattern
> 
> (set (tmp1) (plus:SI (reg:SI) (const_int A))
> (set (tmp2) (leu:SI (tmp1) (const_int B))

case that reg:SI isn't 0 .. A-1).

        Jakub

Reply via email to