]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport fix for PR92090.
authorPeter Bergner <bergner@linux.ibm.com>
Wed, 20 Nov 2019 20:42:41 +0000 (20:42 +0000)
committerPeter Bergner <bergner@gcc.gnu.org>
Wed, 20 Nov 2019 20:42:41 +0000 (14:42 -0600)
gcc/
Backport from mainline
2019-11-07  Peter Bergner <bergner@linux.ibm.com>

PR other/92090
* config/rs6000/predicates.md (input_operand): Allow MODE_PARTIAL_INT
modes for integer constants.

gcc/testsuite/
Backport from mainline
2019-11-13  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/pr92090.c: Limit -mbig to powerpc64le-*-*.
* gcc.target/powerpc/pr92090-2.c: Likewise.

2019-11-07  Peter Bergner <bergner@linux.ibm.com>

PR other/92090
* gcc.target/powerpc/pr92090-2.c: New test.

2019-11-07  Peter Bergner <bergner@linux.ibm.com>

PR other/92090
* gcc.target/powerpc/pr92090.c: New test.

From-SVN: r278527

gcc/ChangeLog
gcc/config/rs6000/predicates.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr92090-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr92090.c [new file with mode: 0644]

index 52aa9c3b5d2b3c9c48f2e387a3531cad80e431b9..2e76ab46f480e936aa46e3acd962a4705f9a5c83 100644 (file)
@@ -1,3 +1,12 @@
+2019-11-20  Peter Bergner <bergner@linux.ibm.com>
+
+       Backport from mainline
+       2019-11-07  Peter Bergner <bergner@linux.ibm.com>
+
+       PR other/92090
+       * config/rs6000/predicates.md (input_operand): Allow MODE_PARTIAL_INT
+       modes for integer constants.
+
 2019-11-20  Michael Matz  <matz@suse.de>
 
        Backport from mainline
index 5cc80dea66c061712478c523c6103705d46ea18b..9e1d717a65b0b9b6cf3eba58e8748fb3a5df709e 100644 (file)
     return 1;
 
   /* Allow any integer constant.  */
-  if (GET_MODE_CLASS (mode) == MODE_INT
-      && CONST_SCALAR_INT_P (op))
+  if (SCALAR_INT_MODE_P (mode) && CONST_SCALAR_INT_P (op))
     return 1;
 
   /* Allow easy vector constants.  */
index 4cc884294d1876445e7918b7bc9e948dba893a86..6fd3d9392b804b9d43a1b9b6b32563f19843e862 100644 (file)
@@ -1,3 +1,21 @@
+2019-11-20  Peter Bergner  <bergner@linux.ibm.com>
+
+       Backport from mainline
+       2019-11-13  David Edelsohn  <dje.gcc@gmail.com>
+
+       * gcc.target/powerpc/pr92090.c: Limit -mbig to powerpc64le-*-*.
+       * gcc.target/powerpc/pr92090-2.c: Likewise.
+
+       2019-11-07  Peter Bergner <bergner@linux.ibm.com>
+
+       PR other/92090
+       * gcc.target/powerpc/pr92090-2.c: New test.
+
+       2019-11-07  Peter Bergner <bergner@linux.ibm.com>
+
+       PR other/92090
+       * gcc.target/powerpc/pr92090.c: New test.
+
 2019-10-28  Michael Matz  <matz@suse.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/powerpc/pr92090-2.c b/gcc/testsuite/gcc.target/powerpc/pr92090-2.c
new file mode 100644 (file)
index 0000000..1710dfd
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do compile } */
+/* { dg-options "-mdejagnu-cpu=power8 -Os -w" } */
+/* { dg-additional-options "-mbig" { target powerpc64le-*-* } } */
+
+/* Verify that we don't ICE.  */
+
+int a;
+static _Atomic long double b, c, d, m;
+double n;
+extern int foo (void);
+extern void bar (int, int, int, int);
+
+void
+bug (void)
+{
+  b = 1.79769313486231580793728971405301199e308L;
+  for (int i = 0; i < 10000; i++)
+    if (__builtin_isinf (n))
+      b;
+  c = 1;
+  int e, f, g, h;
+  while (a)
+    ;
+  for (int i; i; i++)
+    {
+      double j = c /= foo ();
+      if (__builtin_isinf (j))
+       {
+         if (foo == 1 << 31)
+           e++;
+         f++;
+         c = 0;
+       }
+      else
+       {
+         if (foo == 1 << 30)
+           g++;
+         h++;
+         c = 1;
+       }
+    }
+  bar (e, f, g, h);
+  d = 1.79769313486231580793728971405301199e308L;
+  m = 1;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr92090.c b/gcc/testsuite/gcc.target/powerpc/pr92090.c
new file mode 100644 (file)
index 0000000..77c9f84
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+/* { dg-options "-mdejagnu-cpu=power8 -Os" } */
+/* { dg-additional-options "-mbig" { target powerpc64le-*-* } } */
+
+/* Verify that we don't ICE.  */
+
+_Atomic int a;
+_Atomic long double b, c;
+int j;
+void foo (void);
+void bar (int, int, int, int);
+
+void
+bug (void)
+{
+  b = 1;
+  int d, e, f, g;
+  while (a)
+    ;
+  for (int h = 0; h < 10000; h++)
+    {
+      double i = b /= 3;
+      foo ();
+      if (i)
+       {
+         if (i == 1)
+           d++;
+         e++;
+         b = 0;
+       }
+      else
+       {
+         if (i == 2)
+           f++;
+         g++;
+         b = 1;
+       }
+    }
+  bar (d, e, f, g);
+  c = 1;
+  for (int h; h; h++)
+    j = 0;
+}