diff options
author | Victor Kaplansky <victork@il.ibm.com> | 2008-08-06 16:26:46 +0000 |
---|---|---|
committer | Victor Kaplansky <victork@gcc.gnu.org> | 2008-08-06 16:26:46 +0000 |
commit | 4eee656926d2ff1d11587c909a828267a5e3f40a (patch) | |
tree | 63f90eac8f0b5c7190cda47958d6b127285cdbbd /gcc/tree-vect-transform.c | |
parent | 2d12797c692346ff8d9ca935835a3e0b659ab4b8 (diff) | |
download | gcc-4eee656926d2ff1d11587c909a828267a5e3f40a.zip gcc-4eee656926d2ff1d11587c909a828267a5e3f40a.tar.gz gcc-4eee656926d2ff1d11587c909a828267a5e3f40a.tar.bz2 |
tree-vect-transform.c (vect_model_simple_cost): Return immediately if stmt is pure SLP.
2008-08-06 Victor Kaplansky <victork@il.ibm.com>
Ira Rosen <irar@il.ibm.com>
* tree-vect-transform.c (vect_model_simple_cost): Return
immediately if stmt is pure SLP.
(vect_model_store_cost): Ditto.
(vect_model_load_cost): Ditto.
(vectorizable_store): Remove PURE_SLP check before call
to vect_model_store_cost.
(vect_model_store_cost): When checking whether stmt describe
strided access, add a check that it is not slp_node.
Testsute
* gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c: New test.
Co-Authored-By: Ira Rosen <irar@il.ibm.com>
From-SVN: r138815
Diffstat (limited to 'gcc/tree-vect-transform.c')
-rw-r--r-- | gcc/tree-vect-transform.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c index e466594..9d3d40a 100644 --- a/gcc/tree-vect-transform.c +++ b/gcc/tree-vect-transform.c @@ -580,6 +580,10 @@ vect_model_simple_cost (stmt_vec_info stmt_info, int ncopies, int i; int inside_cost = 0, outside_cost = 0; + /* The SLP costs were already calculated during SLP tree build. */ + if (PURE_SLP_STMT (stmt_info)) + return; + inside_cost = ncopies * TARG_VEC_STMT_COST; /* FORNOW: Assuming maximum 2 args per stmts. */ @@ -629,11 +633,15 @@ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies, int group_size; int inside_cost = 0, outside_cost = 0; + /* The SLP costs were already calculated during SLP tree build. */ + if (PURE_SLP_STMT (stmt_info)) + return; + if (dt == vect_constant_def || dt == vect_invariant_def) outside_cost = TARG_SCALAR_TO_VEC_COST; /* Strided access? */ - if (DR_GROUP_FIRST_DR (stmt_info)) + if (DR_GROUP_FIRST_DR (stmt_info) && !slp_node) group_size = vect_cost_strided_group_size (stmt_info); /* Not a strided access. */ else @@ -683,6 +691,10 @@ vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, slp_tree slp_node) struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info), *first_dr; int inside_cost = 0, outside_cost = 0; + /* The SLP costs were already calculated during SLP tree build. */ + if (PURE_SLP_STMT (stmt_info)) + return; + /* Strided accesses? */ first_stmt = DR_GROUP_FIRST_DR (stmt_info); if (first_stmt && !slp_node) @@ -4865,8 +4877,7 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, if (!vec_stmt) /* transformation not required. */ { STMT_VINFO_TYPE (stmt_info) = store_vec_info_type; - if (!PURE_SLP_STMT (stmt_info)) - vect_model_store_cost (stmt_info, ncopies, dt, NULL); + vect_model_store_cost (stmt_info, ncopies, dt, NULL); return true; } |