]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/90756 (g++ ICE in convert_move, at expr.c:218 on...
authorJakub Jelinek <jakub@redhat.com>
Sun, 14 Jul 2019 08:27:12 +0000 (10:27 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sun, 14 Jul 2019 08:27:12 +0000 (10:27 +0200)
Backported from mainline
2019-07-04  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/90756
* explow.c (promote_ssa_mode): Always use TYPE_MODE, don't bypass it
for VECTOR_TYPE_P.

* gcc.dg/pr90756.c: New test.

From-SVN: r273476

gcc/ChangeLog
gcc/explow.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr90756.c [new file with mode: 0644]

index 782ab90f55747dddbe99a9fdd7bbdf3380184bf9..963b8f7a3959b65d4720dbda7fe03f05742e9b20 100644 (file)
@@ -1,3 +1,12 @@
+2019-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2019-07-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/90756
+       * explow.c (promote_ssa_mode): Always use TYPE_MODE, don't bypass it
+       for VECTOR_TYPE_P.
+
 2019-07-12  Richard Biener  <rguenther@suse.de>
 
        Backport from mainline
index ba06458ebdc64db0859127df880742ae1007bd8c..aea7118af1e2556126387ac62789044050e69565 100644 (file)
@@ -892,16 +892,7 @@ promote_ssa_mode (const_tree name, int *punsignedp)
 
   tree type = TREE_TYPE (name);
   int unsignedp = TYPE_UNSIGNED (type);
-  machine_mode mode = TYPE_MODE (type);
-
-  /* Bypass TYPE_MODE when it maps vector modes to BLKmode.  */
-  if (mode == BLKmode)
-    {
-      gcc_assert (VECTOR_TYPE_P (type));
-      mode = type->type_common.mode;
-    }
-
-  machine_mode pmode = promote_mode (type, mode, &unsignedp);
+  machine_mode pmode = promote_mode (type, TYPE_MODE (type), &unsignedp);
   if (punsignedp)
     *punsignedp = unsignedp;
 
index 63ba0ed8558711a6af757d7925b4bc5f2be71bc4..4f1edd6fe5a46cad60ce3cced5fdf85fb850c87c 100644 (file)
@@ -1,3 +1,11 @@
+2019-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2019-07-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/90756
+       * gcc.dg/pr90756.c: New test.
+
 2019-07-12  Wilco Dijkstra  <wdijkstr@arm.com>
 
        PR testsuite/78529
diff --git a/gcc/testsuite/gcc.dg/pr90756.c b/gcc/testsuite/gcc.dg/pr90756.c
new file mode 100644 (file)
index 0000000..3507aa2
--- /dev/null
@@ -0,0 +1,26 @@
+/* PR rtl-optimization/90756 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wno-psabi" } */
+/* { dg-additional-options "-mno-sse" { target ia32 } } */
+
+typedef float B __attribute__((vector_size(4 * sizeof (float))));
+typedef unsigned long long C __attribute__((vector_size(4 * sizeof (long long))));
+typedef short D __attribute__((vector_size(4 * sizeof (short))));
+B z;
+void foo (C);
+C bar (D);
+B baz ();
+D qux (B);
+
+void
+quux (int x)
+{
+  B n = z, b = z;
+  while (1)
+    switch (x)
+      {
+      case 0: n = baz (); /* FALLTHRU */
+      case 1: { B o = n; n = b; b = o; } /* FALLTHRU */
+      case 2: { D u = qux (b); C v = bar (u); foo (v); }
+      }
+}