simplify-rtx.c (simplify_relational_operation): Two signed values with equal high...
authorGeoff Keating <geoffk@cygnus.com>
Mon, 17 Jul 2000 08:41:05 +0000 (08:41 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Mon, 17 Jul 2000 08:41:05 +0000 (08:41 +0000)
* simplify-rtx.c (simplify_relational_operation): Two signed
values with equal high words are less/greater than each other if
their low words are less/greater when considered as unsigned.

From-SVN: r35080

gcc/ChangeLog
gcc/simplify-rtx.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20000717-2.c [new file with mode: 0644]

index 163e83e6ecdbddff54a507cb61204ed3aa923c70..0d81edd842421b332179968a0f3bcb8d3a692608 100644 (file)
@@ -1,3 +1,9 @@
+2000-07-17  Geoffrey Keating  <geoffk@cygnus.com>
+
+       * simplify-rtx.c (simplify_relational_operation): Two signed
+       values with equal high words are less/greater than each other if
+       their low words are less/greater when considered as unsigned.
+
 Mon Jul 17 02:37:06 2000  Marc Espie <espie@openbsd.org>
 
        * configure.in (vax-*-openbsd):  Change to new style configuration,
index 4a7a3a67861818da2cb602db9f89d75c593e80a0..7426949456d3ac24e157a43458670169a85205c8 100644 (file)
@@ -1792,8 +1792,8 @@ simplify_relational_operation (code, mode, op0, op1)
        }
 
       equal = (h0u == h1u && l0u == l1u);
-      op0lt = (h0s < h1s || (h0s == h1s && l0s < l1s));
-      op1lt = (h1s < h0s || (h1s == h0s && l1s < l0s));
+      op0lt = (h0s < h1s || (h0s == h1s && l0u < l1u));
+      op1lt = (h1s < h0s || (h1s == h0s && l1u < l0u));
       op0ltu = (h0u < h1u || (h0u == h1u && l0u < l1u));
       op1ltu = (h1u < h0u || (h1u == h0u && l1u < l0u));
     }
index 5fd67e3f1a4560ec938881e65d1c3d24e299ffa4..6c7e322fef8a9efd600d627617da0462c01bdd35 100644 (file)
@@ -1,3 +1,7 @@
+2000-07-17  Geoffrey Keating  <geoffk@cygnus.com>
+
+       * gcc.c-torture/execute/20000717-2.c: New test.
+
 2000-07-17  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * gcc.dg/c90-digraph-1.c, gcc.dg/c94-digraph.c,
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000717-2.c b/gcc/testsuite/gcc.c-torture/execute/20000717-2.c
new file mode 100644 (file)
index 0000000..4db9032
--- /dev/null
@@ -0,0 +1,11 @@
+static void
+compare (long long foo)
+{
+  if (foo < 4294967297LL)
+    abort();
+}
+int main(void)
+{
+  compare (8589934591LL);
+  exit (0);
+}