tree-optimization/96974 - avoid ICE by replacing assert with standard failure

Minor patch to add a graceful exit in the rare case where an invalid
combination of TYPE_VECTOR_SUBPARTS for nunits_vectype and
*stmt_vectype_out is reached in vect_get_vector_types_for_stmt.

This resolves the ICE seen in PR tree-optimization/96974, however the issue
of correctly handling this rare vectorization combination is left for a
later patch.

Bootstrapped and reg-tested on aarch64-linux-gnu.

2021-03-25  Stam Markianos-Wright  <stam.markianos-wright@arm.com>

gcc/ChangeLog:

	PR tree-optimization/96974
	* tree-vect-stmts.c (vect_get_vector_types_for_stmt): Replace assert
	with graceful exit.

gcc/testsuite/ChangeLog:

	PR tree-optimization/96974
	* g++.target/aarch64/sve/pr96974.C: New test.
This commit is contained in:
Stam Markianos-Wright 2021-03-25 15:29:41 +00:00
parent de00a7bda9
commit aac12084fc
2 changed files with 24 additions and 2 deletions

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-Ofast -march=armv8.2-a+sve -fdisable-tree-fre4 -fdump-tree-slp-details" } */
float a;
int
b ()
{ return __builtin_lrintf(a); }
struct c {
float d;
c() {
for (int e = 0; e < 9; e++)
coeffs[e] = d ? b() : 0;
}
int coeffs[10];
} f;
/* { dg-final { scan-tree-dump "Not vectorized: Incompatible number of vector subparts between" "slp1" } } */

View File

@ -12148,8 +12148,12 @@ vect_get_vector_types_for_stmt (vec_info *vinfo, stmt_vec_info stmt_info,
}
}
gcc_assert (multiple_p (TYPE_VECTOR_SUBPARTS (nunits_vectype),
TYPE_VECTOR_SUBPARTS (*stmt_vectype_out)));
if (!multiple_p (TYPE_VECTOR_SUBPARTS (nunits_vectype),
TYPE_VECTOR_SUBPARTS (*stmt_vectype_out)))
return opt_result::failure_at (stmt,
"Not vectorized: Incompatible number "
"of vector subparts between %T and %T\n",
nunits_vectype, *stmt_vectype_out);
if (dump_enabled_p ())
{