From NetBSD:
authorniklas <niklas@openbsd.org>
Sat, 30 Mar 1996 14:25:42 +0000 (14:25 +0000)
committerniklas <niklas@openbsd.org>
Sat, 30 Mar 1996 14:25:42 +0000 (14:25 +0000)
commit33f86e263dda7b4406fb53e2b9c3faed372aa340
treeef9342b07c2c87a5dda5283bd983eed18008e094
parent31de761c6bdce0878debe7c8d5240f6a7a4315df
From NetBSD:
Patch from J"orn Rennecke that fixes code generation bugs with long
long comparisons.  As of this date, this change hasn't made it into
the development sources.  We must consider this when it comes time
to integrate a newer gcc release.

Thu Mar  7 01:16:23 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

* expmed.c (negate_rtx): Don't negate LONG_MIN if mode is wider
than HOST_WIDE_INT.

gcc now produces worse code for this test case than gcc 2.5.8 when
invoked with -O , but it will optimize as good as gcc 2.5.8 (i.e. all
comparisons vanish) when invoked with -O2 , thus I think it doesn't
matter.  If anyone is interested in looking into this, the code in
expr.c, function expand_expr, case MINUS_EXPR, if-clause for if
(TREE_UNSIGNED (type) || TREE_OVERFLOW (negated)), will refuse to
convert the subtraction into an addition if there is an overflow in
the conversion or negation of the constant.  If both host and target
machine are binary computers with 2-complement representation, the
overflow should not matter.
gnu/usr.bin/gcc/expmed.c