]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/51408 (Miscompilation in arm.md:*minmax_arithsi)
authorKazu Hirata <kazu@codesourcery.com>
Fri, 9 Dec 2011 01:45:54 +0000 (01:45 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 9 Dec 2011 01:45:54 +0000 (01:45 +0000)
gcc/
Backport from mainline:

2011-12-05  Kazu Hirata  <kazu@codesourcery.com>

PR target/51408
* config/arm/arm.md (*minmax_arithsi): Always require the else
clause in the MINUS case.

testsuite/
Backport from mainline:

2011-12-05  Kazu Hirata  <kazu@codesourcery.com>

PR target/51408
* gcc.dg/pr51408.c: New.

From-SVN: r182150

gcc/ChangeLog
gcc/config/arm/arm.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr51408.c [new file with mode: 0644]

index 898cbae36c6bd14a8c72b3b8b1cdd8fafd75c456..ecca0c2e5f03defa0e2a0efe973f5950b47840f4 100644 (file)
@@ -1,3 +1,13 @@
+2011-12-09  Kazu Hirata  <kazu@codesourcery.com>
+
+       Backport from mainline:
+
+       2011-12-05  Kazu Hirata  <kazu@codesourcery.com>
+
+       PR target/51408
+       * config/arm/arm.md (*minmax_arithsi): Always require the else
+       clause in the MINUS case.
+
 2011-12-04  Jérémie Detrey  <Jeremie.Detrey@loria.fr>
 
        PR target/51393
index 8a957d71c7a9dfe3b4a9ba480f7b7324f94e24ca..032af3036edf96dd30869cdfbdf0a40731b886f7 100644 (file)
     bool need_else;
 
     if (which_alternative != 0 || operands[3] != const0_rtx
-        || (code != PLUS && code != MINUS && code != IOR && code != XOR))
+        || (code != PLUS && code != IOR && code != XOR))
       need_else = true;
     else
       need_else = false;
index a6a2327c504cde92d76980e298c18cb5d3ea0a8b..67602c3c967b56771d2cf3f3f3a5eaaecb91e2de 100644 (file)
@@ -1,3 +1,12 @@
+2011-12-09  Kazu Hirata  <kazu@codesourcery.com>
+
+       Backport from mainline:
+
+       2011-12-05  Kazu Hirata  <kazu@codesourcery.com>
+
+       PR target/51408
+       * gcc.dg/pr51408.c: New.
+
 2011-12-04  Uros Bizjak  <ubizjak@gmail.com>
            Jérémie Detrey  <Jeremie.Detrey@loria.fr>
 
diff --git a/gcc/testsuite/gcc.dg/pr51408.c b/gcc/testsuite/gcc.dg/pr51408.c
new file mode 100644 (file)
index 0000000..2cc5cf9
--- /dev/null
@@ -0,0 +1,22 @@
+/* This testcase used to fail because of a bug in 
+   arm.md:*minmax_arithsi.  */
+
+/* { dg-do run } */
+/* { dg-options "-O1" } */
+
+extern void abort (void);
+
+int __attribute__((noinline))
+foo (int a, int b)
+{
+  int max = (b > 0) ? b : 0;
+  return max - a;
+}
+
+int
+main (void)
+{
+  if (foo (3, -1) != -3)
+    abort ();
+  return 0;
+}