re PR tree-optimization/85934 (ICE: verify_gimple failed (error: type mismatch in vector pack expression))

2018-05-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/85934
	* tree-vect-generic.c (expand_vector_operations_1): Hoist
	vector boolean check before scalar optimization.

	* gcc.target/i386/pr85934.c: New testcase.

From-SVN: r260847
This commit is contained in:
Richard Biener 2018-05-28 10:28:38 +00:00 committed by Richard Biener
parent 533aa46a86
commit b29502e735
3 changed files with 31 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2018-05-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/85934
* gcc.target/i386/pr85934.c: New testcase.
2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/renaming12.adb, gnat.dg/renaming12.ads: New testcase.

View file

@ -0,0 +1,20 @@
/* { dg-do compile } */
/* { dg-options "-O -ftree-loop-vectorize -mavx512vbmi" } */
int uf;
int
l7 (int wk, int sv)
{
while (sv < 1)
{
int me;
for (me = 0; me < 64; ++me)
wk += !!((unsigned char) sv) && (!!uf == !!me);
++sv;
}
return wk;
}

View file

@ -1612,6 +1612,12 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
if (!VECTOR_TYPE_P (type)
|| !VECTOR_TYPE_P (TREE_TYPE (rhs1)))
return;
/* A scalar operation pretending to be a vector one. */
if (VECTOR_BOOLEAN_TYPE_P (type)
&& !VECTOR_MODE_P (TYPE_MODE (type))
&& TYPE_MODE (type) != BLKmode)
return;
/* If the vector operation is operating on all same vector elements
implement it with a scalar operation and a splat if the target
@ -1638,12 +1644,6 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
return;
}
}
/* A scalar operation pretending to be a vector one. */
if (VECTOR_BOOLEAN_TYPE_P (type)
&& !VECTOR_MODE_P (TYPE_MODE (type))
&& TYPE_MODE (type) != BLKmode)
return;
if (CONVERT_EXPR_CODE_P (code)
|| code == FLOAT_EXPR