------- 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