From: Jason Eckhardt Date: Tue, 27 Feb 2001 00:48:11 +0000 (+0000) Subject: combine.c (known_cond): Do not reverse the condition when SMAX/UMAX is being consider... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac4cdf4033c6587c0cc361522d42b9732881b488;p=gcc.git combine.c (known_cond): Do not reverse the condition when SMAX/UMAX is being considered and the... * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b21ad175afb..f7a50fd78e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2001-02-26 Jason Eckhardt + + * 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 * config.gcc: Remove obsolete targets "arm*-*-linuxoldld" and diff --git a/gcc/combine.c b/gcc/combine.c index b5735be5937..5dc26a8975d 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -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 index 00000000000..3caff81931a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20010221-1.c @@ -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); +}