------- Comment #7 from avr at gjlay dot de  2010-06-21 12:27 -------
(In reply to comment #5)
> It is folding from the frontend that changes
> 
>     if (y >= 0x80000000)
> 
> to
> 
>     if ((int) y < 0)
> 
> (see code == LT instead of code == GEU)
> 
> But the main issue is that y = -y to abs is bogus (but we can't easily tell
> that as on RTL operands do not have a signedness).

Both transformation are ok from the target's point of view. The bad thing is
that undefinedness is propagated to RTL which is supposed to be an algebraic
formulation of the target's instruction set. But in this case RTL is treated
like a low level representation of C (or any other language gcc supports).

To reproduce the problem it seems essential that there is an abssi2 insn in the
md. 


-- 


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

Reply via email to