aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-11-21 13:57:40 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-11-21 13:57:40 +0000
commitb05e02332f86e3168b96708263a88ec8f07c5e5a (patch)
tree8e642d44a66bc1192bf5b9d678473043c95ac1e7
parent32f9be169ca3c5e1c56735c8b1e076570d56389c (diff)
downloadgcc-b05e02332f86e3168b96708263a88ec8f07c5e5a.zip
gcc-b05e02332f86e3168b96708263a88ec8f07c5e5a.tar.gz
gcc-b05e02332f86e3168b96708263a88ec8f07c5e5a.tar.bz2
tree-vectorizer.h (LOC, [...]): Remove wrappers and fix all users.
2013-11-21 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (LOC, UNKNOWN_LOC, EXPR_LOC, LOC_FILE, LOC_LINE): Remove wrappers and fix all users. (struct _loop_vec_info): Remove loop_line_number member. (LOOP_VINFO_LOC): Remove. * tree-parloops.c, tree-vect-loop-manip.c, tree-vect-slp.c, tree-vectorizer.c: Fix users of LOC, UNKNOWN_LOC, EXPR_LOC, LOC_FILE and LOC_LINE. From-SVN: r205216
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/tree-parloops.c6
-rw-r--r--gcc/tree-vect-loop-manip.c20
-rw-r--r--gcc/tree-vect-slp.c8
-rw-r--r--gcc/tree-vectorizer.c13
-rw-r--r--gcc/tree-vectorizer.h20
6 files changed, 41 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f9c4cc5..766421d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
2013-11-21 Richard Biener <rguenther@suse.de>
+ * tree-vectorizer.h (LOC, UNKNOWN_LOC, EXPR_LOC, LOC_FILE,
+ LOC_LINE): Remove wrappers and fix all users.
+ (struct _loop_vec_info): Remove loop_line_number member.
+ (LOOP_VINFO_LOC): Remove.
+ * tree-parloops.c, tree-vect-loop-manip.c, tree-vect-slp.c,
+ tree-vectorizer.c: Fix users of LOC, UNKNOWN_LOC, EXPR_LOC, LOC_FILE
+ and LOC_LINE.
+
+2013-11-21 Richard Biener <rguenther@suse.de>
+
* tree-ssa-forwprop.c (simplify_vce): New function.
(ssa_forward_propagate_and_combine): Call it.
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index d627c69..78b35df 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2145,7 +2145,7 @@ parallelize_loops (void)
reduction_info_table_type reduction_list;
struct obstack parloop_obstack;
HOST_WIDE_INT estimated;
- LOC loop_loc;
+ source_location loop_loc;
/* Do not parallelize loops in the functions created by parallelization. */
if (parallelized_function_p (cfun->decl))
@@ -2225,9 +2225,9 @@ parallelize_loops (void)
else
fprintf (dump_file, "parallelizing inner loop %d\n",loop->header->index);
loop_loc = find_loop_location (loop);
- if (loop_loc != UNKNOWN_LOC)
+ if (loop_loc != UNKNOWN_LOCATION)
fprintf (dump_file, "\nloop at %s:%d: ",
- LOC_FILE (loop_loc), LOC_LINE (loop_loc));
+ LOCATION_FILE (loop_loc), LOCATION_LINE (loop_loc));
}
gen_parallel_loop (loop, reduction_list,
n_threads, &niter_desc);
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index a03b54c..f5192e8 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -661,7 +661,7 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters)
bool insert_after;
tree init = build_int_cst (TREE_TYPE (niters), 0);
tree step = build_int_cst (TREE_TYPE (niters), 1);
- LOC loop_loc;
+ source_location loop_loc;
enum tree_code code;
orig_cond = get_loop_exit_condition (loop);
@@ -691,9 +691,9 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters)
loop_loc = find_loop_location (loop);
if (dump_enabled_p ())
{
- if (LOCATION_LOCUS (loop_loc) != UNKNOWN_LOC)
- dump_printf (MSG_NOTE, "\nloop at %s:%d: ", LOC_FILE (loop_loc),
- LOC_LINE (loop_loc));
+ if (LOCATION_LOCUS (loop_loc) != UNKNOWN_LOCATION)
+ dump_printf (MSG_NOTE, "\nloop at %s:%d: ", LOCATION_FILE (loop_loc),
+ LOCATION_LINE (loop_loc));
dump_gimple_stmt (MSG_NOTE, TDF_SLIM, cond_stmt, 0);
dump_printf (MSG_NOTE, "\n");
}
@@ -1057,7 +1057,7 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop,
basic_block new_exit_bb;
gimple_stmt_iterator gsi;
edge exit_e = single_exit (loop);
- LOC loop_loc;
+ source_location loop_loc;
tree cost_pre_condition = NULL_TREE;
/* There are many aspects to how likely the first loop is going to be executed.
Without histogram we can't really do good job. Simply set it to
@@ -1365,7 +1365,7 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop,
location is calculated.
Return the loop location if succeed and NULL if not. */
-LOC
+source_location
find_loop_location (struct loop *loop)
{
gimple stmt = NULL;
@@ -1373,7 +1373,7 @@ find_loop_location (struct loop *loop)
gimple_stmt_iterator si;
if (!loop)
- return UNKNOWN_LOC;
+ return UNKNOWN_LOCATION;
stmt = get_loop_exit_condition (loop);
@@ -1385,7 +1385,7 @@ find_loop_location (struct loop *loop)
try to estimate the loop location */
if (!loop->header)
- return UNKNOWN_LOC;
+ return UNKNOWN_LOCATION;
bb = loop->header;
@@ -1396,7 +1396,7 @@ find_loop_location (struct loop *loop)
return gimple_location (stmt);
}
- return UNKNOWN_LOC;
+ return UNKNOWN_LOCATION;
}
@@ -2224,7 +2224,7 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
loop_version (loop, cond_expr, &condition_bb,
prob, prob, REG_BR_PROB_BASE - prob, true);
- if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOC
+ if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
&& dump_enabled_p ())
{
if (version_alias)
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index bd9e4e2..c2e4912 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -48,23 +48,23 @@ along with GCC; see the file COPYING3. If not see
/* Extract the location of the basic block in the source code.
Return the basic block location if succeed and NULL if not. */
-LOC
+source_location
find_bb_location (basic_block bb)
{
gimple stmt = NULL;
gimple_stmt_iterator si;
if (!bb)
- return UNKNOWN_LOC;
+ return UNKNOWN_LOCATION;
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
{
stmt = gsi_stmt (si);
- if (gimple_location (stmt) != UNKNOWN_LOC)
+ if (gimple_location (stmt) != UNKNOWN_LOCATION)
return gimple_location (stmt);
}
- return UNKNOWN_LOC;
+ return UNKNOWN_LOCATION;
}
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index fea7086..7416aaa 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -79,7 +79,7 @@ along with GCC; see the file COPYING3. If not see
#include "dbgcnt.h"
/* Loop or bb location. */
-LOC vect_location;
+source_location vect_location;
/* Vector mapping GIMPLE stmt to stmt_vec_info. */
vec<vec_void_p> stmt_vec_info_vec;
@@ -354,10 +354,11 @@ vectorize_loops (void)
{
loop_vec_info loop_vinfo;
vect_location = find_loop_location (loop);
- if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOC
+ if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
&& dump_enabled_p ())
dump_printf (MSG_NOTE, "\nAnalyzing loop at %s:%d\n",
- LOC_FILE (vect_location), LOC_LINE (vect_location));
+ LOCATION_FILE (vect_location),
+ LOCATION_LINE (vect_location));
loop_vinfo = vect_analyze_loop (loop);
loop->aux = loop_vinfo;
@@ -368,7 +369,7 @@ vectorize_loops (void)
if (!dbg_cnt (vect_loop))
break;
- if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOC
+ if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
&& dump_enabled_p ())
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
"loop vectorized\n");
@@ -390,7 +391,7 @@ vectorize_loops (void)
}
}
- vect_location = UNKNOWN_LOC;
+ vect_location = UNKNOWN_LOCATION;
statistics_counter_event (cfun, "Vectorized loops", num_vectorized_loops);
if (dump_enabled_p ()
@@ -549,7 +550,7 @@ increase_alignment (void)
{
struct varpool_node *vnode;
- vect_location = UNKNOWN_LOC;
+ vect_location = UNKNOWN_LOCATION;
/* Increase the alignment of all global arrays for vectorization. */
FOR_EACH_DEFINED_VARIABLE (vnode)
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 1297fab..23c4d88 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -25,12 +25,6 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "hash-table.h"
-typedef source_location LOC;
-#define UNKNOWN_LOC UNKNOWN_LOCATION
-#define EXPR_LOC(e) EXPR_LOCATION (e)
-#define LOC_FILE(l) LOCATION_FILE (l)
-#define LOC_LINE(l) LOCATION_LINE (l)
-
/* Used for naming of new temporaries. */
enum vect_var_kind {
vect_simple_var,
@@ -273,9 +267,6 @@ typedef struct _loop_vec_info {
/* Unrolling factor */
int vectorization_factor;
- /* The loop location in the source. */
- LOC loop_line_number;
-
/* Unknown DRs according to which loop was peeled. */
struct data_reference *unaligned_dr;
@@ -343,6 +334,10 @@ typedef struct _loop_vec_info {
this. */
bool peeling_for_gaps;
+ /* When the number of iterations is not a multiple of the vector size
+ we need to peel off iterations at the end to form an epilogue loop. */
+ bool peeling_for_niter;
+
/* Reductions are canonicalized so that the last operand is the reduction
operand. If this places a constant into RHS1, this decanonicalizes
GIMPLE for other phases, so we must track when this has occurred and
@@ -369,7 +364,6 @@ typedef struct _loop_vec_info {
#define LOOP_PEELING_FOR_ALIGNMENT(L) (L)->peeling_for_alignment
#define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr
#define LOOP_VINFO_MAY_MISALIGN_STMTS(L) (L)->may_misalign_stmts
-#define LOOP_VINFO_LOC(L) (L)->loop_line_number
#define LOOP_VINFO_MAY_ALIAS_DDRS(L) (L)->may_alias_ddrs
#define LOOP_VINFO_COMP_ALIAS_DDRS(L) (L)->comp_alias_ddrs
#define LOOP_VINFO_GROUPED_STORES(L) (L)->grouped_stores
@@ -925,7 +919,7 @@ unlimited_cost_model ()
}
/* Source location */
-extern LOC vect_location;
+extern source_location vect_location;
/*-----------------------------------------------------------------*/
/* Function prototypes. */
@@ -941,7 +935,7 @@ extern void vect_do_peeling_for_loop_bound (loop_vec_info, tree, tree,
unsigned int, bool);
extern void vect_do_peeling_for_alignment (loop_vec_info, tree,
unsigned int, bool);
-extern LOC find_loop_location (struct loop *);
+extern source_location find_loop_location (struct loop *);
extern bool vect_can_advance_ivs_p (loop_vec_info);
/* In tree-vect-stmts.c. */
@@ -1072,7 +1066,7 @@ extern void vect_detect_hybrid_slp (loop_vec_info);
extern void vect_get_slp_defs (vec<tree> , slp_tree,
vec<vec<tree> > *, int);
-extern LOC find_bb_location (basic_block);
+extern source_location find_bb_location (basic_block);
extern bb_vec_info vect_slp_analyze_bb (basic_block);
extern void vect_slp_transform_bb (basic_block);