aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-07-04 06:49:22 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-07-04 06:49:22 +0200
commita59b2e42062f2d00fb44a008cd395d0b9590c631 (patch)
treef8d8ac70c034c6dc4a98d541ef803f302f331188 /gcc
parent0e68d70b7fbf4533d7b5ccd84c439026062b1a0e (diff)
downloadgcc-a59b2e42062f2d00fb44a008cd395d0b9590c631.zip
gcc-a59b2e42062f2d00fb44a008cd395d0b9590c631.tar.gz
gcc-a59b2e42062f2d00fb44a008cd395d0b9590c631.tar.bz2
re PR rtl-optimization/90756 (g++ ICE in convert_move, at expr.c:218 on i686 and s390x)
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: r273036
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/explow.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr90756.c26
4 files changed, 38 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2d6758d..2cfc446 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+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-03 Dennis Zhang <dennis.zhang@arm.com>
* config/aarch64/aarch64.md: Remove redundant constraints from
diff --git a/gcc/explow.c b/gcc/explow.c
index ba06458..aea7118 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aa00f0b..66045e5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/90756
+ * gcc.dg/pr90756.c: New test.
+
2019-07-04 Chenghua Xu <paul.hua.gm@gmail.com>
* gcc.target/mips/mips-fmadd.c: Rename to ...
diff --git a/gcc/testsuite/gcc.dg/pr90756.c b/gcc/testsuite/gcc.dg/pr90756.c
new file mode 100644
index 0000000..3507aa2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr90756.c
@@ -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); }
+ }
+}