aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.c
diff options
context:
space:
mode:
authorAditya Kumar <hiraditya@hotmail.com>2015-04-30 05:42:54 +0000
committerJeff Law <law@gcc.gnu.org>2015-04-29 23:42:54 -0600
commit2fc3c9a59b046f462fe13232768f5efc023928ea (patch)
tree179840964ac81acb579c6e66e00da11d2f2b1a53 /gcc/tree-vectorizer.c
parent32496fdde11abfeda4bd911c489fdda5f3e141e6 (diff)
downloadgcc-2fc3c9a59b046f462fe13232768f5efc023928ea.zip
gcc-2fc3c9a59b046f462fe13232768f5efc023928ea.tar.gz
gcc-2fc3c9a59b046f462fe13232768f5efc023928ea.tar.bz2
tree-vectorizer.c (set_uid_loop_bbs): New.
2015-04-29 Aditya Kumar <hiraditya@hotmail.com> * tree-vectorizer.c (set_uid_loop_bbs): New. Factored out of vectorize_loops. (vectorize_loops): Use it. From-SVN: r222610
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r--gcc/tree-vectorizer.c65
1 files changed, 34 insertions, 31 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index 313e936..e216114f 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -398,6 +398,39 @@ fold_loop_vectorized_call (gimple g, tree value)
update_stmt (use_stmt);
}
}
+/* Set the uids of all the statements in basic blocks inside loop
+ represented by LOOP_VINFO. LOOP_VECTORIZED_CALL is the internal
+ call guarding the loop which has been if converted. */
+static void
+set_uid_loop_bbs (loop_vec_info loop_vinfo, gimple loop_vectorized_call)
+{
+ tree arg = gimple_call_arg (loop_vectorized_call, 1);
+ basic_block *bbs;
+ unsigned int i;
+ struct loop *scalar_loop = get_loop (cfun, tree_to_shwi (arg));
+
+ LOOP_VINFO_SCALAR_LOOP (loop_vinfo) = scalar_loop;
+ gcc_checking_assert (vect_loop_vectorized_call
+ (LOOP_VINFO_SCALAR_LOOP (loop_vinfo))
+ == loop_vectorized_call);
+ bbs = get_loop_body (scalar_loop);
+ for (i = 0; i < scalar_loop->num_nodes; i++)
+ {
+ basic_block bb = bbs[i];
+ gimple_stmt_iterator gsi;
+ for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ gimple phi = gsi_stmt (gsi);
+ gimple_set_uid (phi, 0);
+ }
+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ gimple stmt = gsi_stmt (gsi);
+ gimple_set_uid (stmt, 0);
+ }
+ }
+ free (bbs);
+}
/* Function vectorize_loops.
@@ -461,37 +494,7 @@ vectorize_loops (void)
gimple loop_vectorized_call = vect_loop_vectorized_call (loop);
if (loop_vectorized_call)
- {
- tree arg = gimple_call_arg (loop_vectorized_call, 1);
- basic_block *bbs;
- unsigned int i;
- struct loop *scalar_loop = get_loop (cfun, tree_to_shwi (arg));
-
- LOOP_VINFO_SCALAR_LOOP (loop_vinfo) = scalar_loop;
- gcc_checking_assert (vect_loop_vectorized_call
- (LOOP_VINFO_SCALAR_LOOP (loop_vinfo))
- == loop_vectorized_call);
- bbs = get_loop_body (scalar_loop);
- for (i = 0; i < scalar_loop->num_nodes; i++)
- {
- basic_block bb = bbs[i];
- gimple_stmt_iterator gsi;
- for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
- gimple phi = gsi_stmt (gsi);
- gimple_set_uid (phi, 0);
- }
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
- gimple stmt = gsi_stmt (gsi);
- gimple_set_uid (stmt, 0);
- }
- }
- free (bbs);
- }
-
+ set_uid_loop_bbs (loop_vinfo, loop_vectorized_call);
if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
&& dump_enabled_p ())
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,