combine.c (known_cond): Do not reverse the condition when SMAX/UMAX is being consider...
authorJason Eckhardt <jle@redhat.com>
Tue, 27 Feb 2001 00:48:11 +0000 (00:48 +0000)
committerJason Eckhardt <jle@gcc.gnu.org>
Tue, 27 Feb 2001 00:48:11 +0000 (00:48 +0000)
        * combine.c (known_cond): Do not reverse the condition when
        SMAX/UMAX is being considered and the condition is for equality
        or inequality.

        * testsuite/gcc.c-torture/execute/20010221-1.c: New test.

From-SVN: r40077

gcc/ChangeLog
gcc/combine.c
gcc/testsuite/gcc.c-torture/execute/20010221-1.c [new file with mode: 0644]

index b21ad175afb5c328282d77d4df9806a52e788536..f7a50fd78e7255036e7888acae3438e20e660090 100644 (file)
@@ -1,3 +1,11 @@
+2001-02-26  Jason Eckhardt  <jle@redhat.com>
+
+       * combine.c (known_cond): Do not reverse the condition when
+       SMAX/UMAX is being considered and the condition is for equality 
+       or inequality.
+
+       * testsuite/gcc.c-torture/execute/20010221-1.c: New test.
+
 2001-02-26  Philip Blundell  <philb@gnu.org>
 
        * config.gcc: Remove obsolete targets "arm*-*-linuxoldld" and
index b5735be59372974a33caa48e42c990d7b449610f..5dc26a8975d32176fd9ccb9c22d0b55306441bd7 100644 (file)
@@ -7512,7 +7512,12 @@ known_cond (x, cond, reg, val)
            {
              int unsignedp = (code == UMIN || code == UMAX);
 
-             if (code == SMAX || code == UMAX)
+             /* Do not reverse the condition when it is NE or EQ.
+                This is because we cannot conclude anything about
+                the value of 'SMAX (x, y)' when x is not equal to y,
+                but we can when x equals y.  */ 
+             if ((code == SMAX || code == UMAX)
+                 && ! (cond == EQ || cond == NE))
                cond = reverse_condition (cond);
 
              switch (cond)
diff --git a/gcc/testsuite/gcc.c-torture/execute/20010221-1.c b/gcc/testsuite/gcc.c-torture/execute/20010221-1.c
new file mode 100644 (file)
index 0000000..3caff81
--- /dev/null
@@ -0,0 +1,17 @@
+
+int n = 2;
+
+main ()
+{
+  int i, x = 45;
+
+  for (i = 0; i < n; i++)
+    {
+      if (i != 0)
+       x = ( i > 0 ) ? i : 0;
+    }
+
+  if (x != 1)
+    abort ();
+  exit (0);
+}