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:
parent
de00a7bda9
commit
aac12084fc
18
gcc/testsuite/g++.target/aarch64/sve/pr96974.C
Normal file
18
gcc/testsuite/g++.target/aarch64/sve/pr96974.C
Normal 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" } } */
|
||||
@ -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 ())
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user