mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-09 04:23:46 +08:00
tree-optimization/91403 - avoid excessive code-generation
The vectorizer, for large permuted grouped loads, generates inefficient intermediate code (cleaned up only later) that runs into complexity issues in SCEV analysis and elsewhere. For the non-single-element interleaving case we already put a hard limit in place, this applies the same limit to the missing case. 2021-01-11 Richard Biener <rguenther@suse.de> PR tree-optimization/91403 * tree-vect-data-refs.c (vect_analyze_group_access_1): Cap single-element interleaving group size at 4096 elements. * gcc.dg/vect/pr91403.c: New testcase.
This commit is contained in:
parent
6ebf79fcd4
commit
84684e0f78
11
gcc/testsuite/gcc.dg/vect/pr91403.c
Normal file
11
gcc/testsuite/gcc.dg/vect/pr91403.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-O3" } */
|
||||
|
||||
extern int a[][1000000];
|
||||
int b;
|
||||
void c()
|
||||
{
|
||||
for (int d = 2; d <= 9; d++)
|
||||
for (int e = 32; e <= 41; e++)
|
||||
b += a[d][5];
|
||||
}
|
@ -2538,7 +2538,11 @@ vect_analyze_group_access_1 (vec_info *vinfo, dr_vec_info *dr_info)
|
||||
size. */
|
||||
if (DR_IS_READ (dr)
|
||||
&& (dr_step % type_size) == 0
|
||||
&& groupsize > 0)
|
||||
&& groupsize > 0
|
||||
/* This could be UINT_MAX but as we are generating code in a very
|
||||
inefficient way we have to cap earlier.
|
||||
See PR91403 for example. */
|
||||
&& groupsize <= 4096)
|
||||
{
|
||||
DR_GROUP_FIRST_ELEMENT (stmt_info) = stmt_info;
|
||||
DR_GROUP_SIZE (stmt_info) = groupsize;
|
||||
|
Loading…
Reference in New Issue
Block a user