aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-11-07 08:06:08 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-11-07 08:06:08 +0000
commit29afecdf1b14136640f1d88da0e10751dbc6283c (patch)
treee8cf074ca42c483bdddbc561af7283cbc762e5fd /gcc/tree-vect-stmts.c
parenta0d3edf8a54e30d48f61eb59a0be33c7ed2b971f (diff)
downloadgcc-29afecdf1b14136640f1d88da0e10751dbc6283c.zip
gcc-29afecdf1b14136640f1d88da0e10751dbc6283c.tar.gz
gcc-29afecdf1b14136640f1d88da0e10751dbc6283c.tar.bz2
re PR middle-end/37150 (basic-block vectorization misses some unrolled loops)
2016-11-07 Richard Biener <rguenther@suse.de> PR tree-optimization/37150 * tree-vectorizer.h (vect_transform_slp_perm_load): Add n_perms parameter. * tree-vect-slp.c (vect_supported_load_permutation_p): Adjust. (vect_analyze_slp_cost_1): Account for the real number of permutations emitted and for dead loads. (vect_transform_slp_perm_load): Add n_perms parameter counting the number of emitted permutations. * tree-vect-stmts.c (vectorizable_load): Adjust. From-SVN: r241893
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 1d17156..ab01def 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -6978,8 +6978,11 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
}
}
if (slp_perm)
- vect_transform_slp_perm_load (slp_node, dr_chain, gsi, vf,
- slp_node_instance, false);
+ {
+ unsigned n_perms;
+ vect_transform_slp_perm_load (slp_node, dr_chain, gsi, vf,
+ slp_node_instance, false, &n_perms);
+ }
return true;
}
@@ -7497,8 +7500,10 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
if (slp_perm)
{
+ unsigned n_perms;
if (!vect_transform_slp_perm_load (slp_node, dr_chain, gsi, vf,
- slp_node_instance, false))
+ slp_node_instance, false,
+ &n_perms))
{
dr_chain.release ();
return false;