aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-01-02 14:10:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-01-02 14:10:36 +0000
commit0682ed3eb20eb8d5f248710c1e23a819c8b2d2a5 (patch)
tree6b40c0b52bbcaffde33ceb661297de0f74ba73db
parent0f9f12f6f83a78e9afd6c76c443b45cad754eb16 (diff)
downloadgcc-0682ed3eb20eb8d5f248710c1e23a819c8b2d2a5.zip
gcc-0682ed3eb20eb8d5f248710c1e23a819c8b2d2a5.tar.gz
gcc-0682ed3eb20eb8d5f248710c1e23a819c8b2d2a5.tar.bz2
tree-vect-stmts.c (vectorizable_load): When vectorizing an invariant load do not generate a vector load from the...
2013-01-02 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (vectorizable_load): When vectorizing an invariant load do not generate a vector load from the scalar location. From-SVN: r194806
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-vect-stmts.c24
2 files changed, 19 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 210fb54..10592b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2013-01-02 Richard Biener <rguenther@suse.de>
+ * tree-vect-stmts.c (vectorizable_load): When vectorizing an
+ invariant load do not generate a vector load from the scalar
+ location.
+
+2013-01-02 Richard Biener <rguenther@suse.de>
+
PR bootstrap/55784
* configure.ac: Add $GMPINC to CFLAGS/CXXFLAGS.
* configure: Regenerate.
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 1e8d7ee..da9f12b 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -4988,6 +4988,19 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
/* Record the mapping between SSA_NAMEs and statements. */
vect_record_grouped_load_vectors (stmt, dr_chain);
}
+ /* Handle invariant-load. */
+ else if (inv_p && !bb_vinfo)
+ {
+ gimple_stmt_iterator gsi2 = *gsi;
+ gcc_assert (!grouped_load && !slp_perm);
+ gsi_next (&gsi2);
+ new_temp = vect_init_vector (stmt, scalar_dest,
+ vectype, &gsi2);
+ new_stmt = SSA_NAME_DEF_STMT (new_temp);
+ /* Store vector loads in the corresponding SLP_NODE. */
+ if (slp)
+ SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt);
+ }
else
{
for (i = 0; i < vec_num; i++)
@@ -5135,17 +5148,6 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
}
}
- /* 4. Handle invariant-load. */
- if (inv_p && !bb_vinfo)
- {
- gimple_stmt_iterator gsi2 = *gsi;
- gcc_assert (!grouped_load);
- gsi_next (&gsi2);
- new_temp = vect_init_vector (stmt, scalar_dest,
- vectype, &gsi2);
- new_stmt = SSA_NAME_DEF_STMT (new_temp);
- }
-
if (negative)
{
tree perm_mask = perm_mask_for_reverse (vectype);