]> 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 05:02:59 +0000 (05:02 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 9 Dec 2011 05:02:59 +0000 (05:02 +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: r182153

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

index 094c5aaf111dff6c6a8aea7ce42793f2eea34705..34f81dfc2e54a2d7dbfcc4e7b703592f0650d7c0 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-08  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 47737fcfa9229f45a1cebbf4afe3ca6c0eb84e23..7f41d8f97745e70f087a6fc796cb6239b9e0b4f3 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 4839a7d68fbfec16d9e97a23d7273f209836eba1..6bcd073a0e58b9ba61cebaaea6ab7d6651985335 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-08  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
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;
+}