diff options
author | Richard Biener <rguenther@suse.de> | 2023-09-29 15:12:54 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-05-28 11:47:05 +0200 |
commit | eaaa4b88038d4d6eda1b20ab662f1568fd9be31f (patch) | |
tree | 07305633f31f90044174b06bd90bb6d989c4f16f /gcc | |
parent | 65aa46ffc3b06bba3d49b9b8315610c706a1215b (diff) | |
download | gcc-eaaa4b88038d4d6eda1b20ab662f1568fd9be31f.zip gcc-eaaa4b88038d4d6eda1b20ab662f1568fd9be31f.tar.gz gcc-eaaa4b88038d4d6eda1b20ab662f1568fd9be31f.tar.bz2 |
tree-optimization/115254 - don't account single-lane SLP against discovery limit
The following avoids accounting single-lane SLP to the discovery
limit. As the two testcases show this makes discovery fail,
unfortunately even not the same across targets. The following
should fix two FAILs for GCN as a side-effect.
PR tree-optimization/115254
* tree-vect-slp.cc (vect_build_slp_tree): Only account
multi-lane SLP to limit.
* gcc.dg/vect/slp-cond-2-big-array.c: Expect 4 times SLP.
* gcc.dg/vect/slp-cond-2.c: Likewise.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/slp-cond-2-big-array.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/slp-cond-2.c | 2 | ||||
-rw-r--r-- | gcc/tree-vect-slp.cc | 31 |
3 files changed, 20 insertions, 15 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/slp-cond-2-big-array.c b/gcc/testsuite/gcc.dg/vect/slp-cond-2-big-array.c index cb7eb94..9a9f63c 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-cond-2-big-array.c +++ b/gcc/testsuite/gcc.dg/vect/slp-cond-2-big-array.c @@ -128,4 +128,4 @@ main () return 0; } -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-cond-2.c b/gcc/testsuite/gcc.dg/vect/slp-cond-2.c index 1dcee46..08bbb3d 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-cond-2.c +++ b/gcc/testsuite/gcc.dg/vect/slp-cond-2.c @@ -128,4 +128,4 @@ main () return 0; } -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect" } } */ diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index c7ed520..7a963e2 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1725,21 +1725,26 @@ vect_build_slp_tree (vec_info *vinfo, SLP_TREE_SCALAR_STMTS (res) = stmts; bst_map->put (stmts.copy (), res); - if (*limit == 0) + /* Single-lane SLP doesn't have the chance of run-away, do not account + it to the limit. */ + if (stmts.length () > 1) { - if (dump_enabled_p ()) - dump_printf_loc (MSG_NOTE, vect_location, - "SLP discovery limit exceeded\n"); - /* Mark the node invalid so we can detect those when still in use - as backedge destinations. */ - SLP_TREE_SCALAR_STMTS (res) = vNULL; - SLP_TREE_DEF_TYPE (res) = vect_uninitialized_def; - res->failed = XNEWVEC (bool, group_size); - memset (res->failed, 0, sizeof (bool) * group_size); - memset (matches, 0, sizeof (bool) * group_size); - return NULL; + if (*limit == 0) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "SLP discovery limit exceeded\n"); + /* Mark the node invalid so we can detect those when still in use + as backedge destinations. */ + SLP_TREE_SCALAR_STMTS (res) = vNULL; + SLP_TREE_DEF_TYPE (res) = vect_uninitialized_def; + res->failed = XNEWVEC (bool, group_size); + memset (res->failed, 0, sizeof (bool) * group_size); + memset (matches, 0, sizeof (bool) * group_size); + return NULL; + } + --*limit; } - --*limit; if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, |