]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-vect-stmts.c (vectorizable_load): When vectorizing an invariant load do not...
authorRichard Biener <rguenther@suse.de>
Wed, 2 Jan 2013 14:10:36 +0000 (14:10 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 2 Jan 2013 14:10:36 +0000 (14:10 +0000)
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

gcc/ChangeLog
gcc/tree-vect-stmts.c

index 210fb54f26eae191268191ad45909a52859ae475..10592b898858bb157bd0c7198709f19f6703910a 100644 (file)
@@ -1,3 +1,9 @@
+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
index 1e8d7ee44017a4b068be7674e3dc608e39b334cc..da9f12b5c8cb242d0396ad77e8ce9884dcfc5d52 100644 (file)
@@ -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);