Commit a59b2e42 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 0e68d70b
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> 2019-07-03 Dennis Zhang <dennis.zhang@arm.com>
* config/aarch64/aarch64.md: Remove redundant constraints from * config/aarch64/aarch64.md: Remove redundant constraints from
......
...@@ -892,16 +892,7 @@ promote_ssa_mode (const_tree name, int *punsignedp) ...@@ -892,16 +892,7 @@ promote_ssa_mode (const_tree name, int *punsignedp)
tree type = TREE_TYPE (name); tree type = TREE_TYPE (name);
int unsignedp = TYPE_UNSIGNED (type); int unsignedp = TYPE_UNSIGNED (type);
machine_mode mode = TYPE_MODE (type); machine_mode pmode = promote_mode (type, TYPE_MODE (type), &unsignedp);
/* 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);
if (punsignedp) if (punsignedp)
*punsignedp = unsignedp; *punsignedp = unsignedp;
......
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> 2019-07-04 Chenghua Xu <paul.hua.gm@gmail.com>
* gcc.target/mips/mips-fmadd.c: Rename to ... * gcc.target/mips/mips-fmadd.c: Rename to ...
......
/* 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); }
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment