Commit 7353a8c1 by Leehod Baruch Committed by Dorit Nuzman

tree-vectorizer.h (LOC): New type.

        * tree-vectorizer.h (LOC): New type.
        (UNKNOWN_LOC, EXPR_LOC, LOC_FILE, LOC_LINE): New macros.
        (loop_line_number): New field in struct _loop_vec_info.
        (LOOP_VINFO_LOC, LOOP_LOC): New macros.

        * tree-vectorizer.c (input.h): Included.
        (find_loop_location): New function.
        (vect_debug_stats): Argument changed from loop to LOC. Computation of
        loop line number removed.
        (vect_debug_details): Likewise.
        (new_loop_vec_info): Initialize new field LOOP_VINFO_LOC.

        (slpeel_make_loop_iterate_ntimes): Call find_loop_location. Argument in
        call to vect_debug_details/stats changed from loop to loop_loc.
        (slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
        (slpeel_tree_peel_loop_to_edge): Likewise.

        (vect_analyze_offset_expr): Argument in call to vect_debug_details/stats
        changed from NULL to UNKNOWN_LOC.
        (vect_get_base_and_offset):
        (vect_create_addr_base_for_vector_ref):
        (get_vectype_for_scalar_type):
        (vect_create_data_ref_ptr):
        (vect_init_vector):
        (vect_get_vec_def_for_operand):
        (vect_finish_stmt_generation):
        (vectorizable_assignment):
        (vectorizable_operation):
        (vectorizable_store):
        (vectorizable_load):
        (vect_transform_stmt):
        (vect_update_ivs_after_vectorizer):
        (vect_do_peeling_for_loop_bound):
        (vect_do_peeling_for_alignment):
        (vect_transform_loop):
        (vect_is_simple_use):
        (vect_analyze_operations):
        (vect_is_simple_iv_evolution):
        (vect_analyze_scalar_cycles):
        (vect_analyze_data_ref_dependences):
        (vect_compute_data_ref_alignment):
        (vect_enhance_data_refs_alignment):
        (vect_analyze_data_ref_access):
        (vect_analyze_data_ref_accesses):
        (vect_analyze_pointer_ref_access):
        (vect_get_memtag_and_dr):
        (vect_analyze_data_refs):
        (vect_mark_relevant):
        (vect_stmt_relevant_p):
        (vect_mark_stmts_to_be_vectorized):
        (vect_can_advance_ivs_p):
        (vect_get_loop_niters):
        (vect_analyze_loop):
        (vectorize_loops): Likewise.

        (vectorizable_load): Argument in call to vect_debug_details/stats
        changed from loop to LOOP_LOC (loop_vinfo).
        (vect_transform_loop):
        (vect_analyze_operations):
        (vect_analyze_scalar_cycles):
        (vect_analyze_data_ref_dependence):
        (vect_enhance_data_refs_alignment):
        (vect_analyze_data_ref_accesses):
        (vect_analyze_pointer_ref_access):
        (vect_analyze_data_refs):
        (vect_analyze_loop): Likewise.

        (vect_analyze_loop_form): Argument in call to vect_debug_details/stats
        changed from loop to loop_loc.

        (vect_enhance_data_refs_alignment): Removed unused variable loop.

From-SVN: r94662
parent ef302293
...@@ -143,6 +143,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -143,6 +143,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tree-chrec.h" #include "tree-chrec.h"
#include "tree-data-ref.h" #include "tree-data-ref.h"
#include "tree-scalar-evolution.h" #include "tree-scalar-evolution.h"
#include "input.h"
#include "tree-vectorizer.h" #include "tree-vectorizer.h"
#include "tree-pass.h" #include "tree-pass.h"
#include "langhooks.h" #include "langhooks.h"
...@@ -178,6 +179,7 @@ static void rename_variables_in_loop (struct loop *); ...@@ -178,6 +179,7 @@ static void rename_variables_in_loop (struct loop *);
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
static void slpeel_verify_cfg_after_peeling (struct loop *, struct loop *); static void slpeel_verify_cfg_after_peeling (struct loop *, struct loop *);
#endif #endif
static LOC find_loop_location (struct loop *);
/************************************************************************* /*************************************************************************
...@@ -265,8 +267,13 @@ loop_vec_info new_loop_vec_info (struct loop *loop); ...@@ -265,8 +267,13 @@ loop_vec_info new_loop_vec_info (struct loop *loop);
void destroy_loop_vec_info (loop_vec_info); void destroy_loop_vec_info (loop_vec_info);
stmt_vec_info new_stmt_vec_info (tree, loop_vec_info); stmt_vec_info new_stmt_vec_info (tree, loop_vec_info);
static bool vect_debug_stats (struct loop *loop); /*************************************************************************
static bool vect_debug_details (struct loop *loop); Vectorization Debug Information.
*************************************************************************/
/* Utilities for output formatting. */
static bool vect_debug_stats (LOC);
static bool vect_debug_details (LOC);
/************************************************************************* /*************************************************************************
...@@ -668,6 +675,7 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters) ...@@ -668,6 +675,7 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters)
tree step = build_int_cst (TREE_TYPE (niters), 1); tree step = build_int_cst (TREE_TYPE (niters), 1);
tree then_label; tree then_label;
tree else_label; tree else_label;
LOC loop_loc;
orig_cond = get_loop_exit_condition (loop); orig_cond = get_loop_exit_condition (loop);
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
...@@ -699,7 +707,8 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters) ...@@ -699,7 +707,8 @@ slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters)
/* Remove old loop exit test: */ /* Remove old loop exit test: */
bsi_remove (&loop_cond_bsi); bsi_remove (&loop_cond_bsi);
if (vect_debug_stats (loop) || vect_debug_details (loop)) loop_loc = find_loop_location (loop);
if (vect_debug_details (loop_loc))
print_generic_expr (dump_file, cond_stmt, TDF_SLIM); print_generic_expr (dump_file, cond_stmt, TDF_SLIM);
loop->nb_iterations = niters; loop->nb_iterations = niters;
...@@ -965,6 +974,7 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops, ...@@ -965,6 +974,7 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops,
basic_block bb_before_first_loop; basic_block bb_before_first_loop;
basic_block bb_between_loops; basic_block bb_between_loops;
edge exit_e = loop->exit_edges [0]; edge exit_e = loop->exit_edges [0];
LOC loop_loc;
if (!slpeel_can_duplicate_loop_p (loop, e)) if (!slpeel_can_duplicate_loop_p (loop, e))
return NULL; return NULL;
...@@ -992,7 +1002,9 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops, ...@@ -992,7 +1002,9 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops,
if (!(new_loop = slpeel_tree_duplicate_loop_to_edge_cfg (loop, loops, e))) if (!(new_loop = slpeel_tree_duplicate_loop_to_edge_cfg (loop, loops, e)))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) loop_loc = find_loop_location (loop);
if (vect_debug_stats (loop_loc)
|| vect_debug_details (loop_loc))
fprintf (dump_file, "tree_duplicate_loop_to_edge_cfg failed.\n"); fprintf (dump_file, "tree_duplicate_loop_to_edge_cfg failed.\n");
return NULL; return NULL;
} }
...@@ -1106,6 +1118,48 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops, ...@@ -1106,6 +1118,48 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops,
return new_loop; return new_loop;
} }
/* Function vect_get_loop_location.
Extract the location of the loop in the source code.
If the loop is not well formed for vectorization, an estimated
location is calculated.
Return the loop location if succeed and NULL if not. */
static LOC
find_loop_location (struct loop *loop)
{
tree node = NULL_TREE;
basic_block bb;
block_stmt_iterator si;
if (!loop)
return UNKNOWN_LOC;
node = get_loop_exit_condition (loop);
if (node && EXPR_P (node) && EXPR_HAS_LOCATION (node)
&& EXPR_FILENAME (node) && EXPR_LINENO (node))
return EXPR_LOC (node);
/* If we got here the loop is probably not "well formed",
try to estimate the loop location */
if (!loop->header)
return UNKNOWN_LOC;
bb = loop->header;
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{
node = bsi_stmt (si);
if (node && EXPR_P (node) && EXPR_HAS_LOCATION (node))
return EXPR_LOC (node);
}
return UNKNOWN_LOC;
}
/* Here the proper Vectorizer starts. */ /* Here the proper Vectorizer starts. */
...@@ -1185,6 +1239,7 @@ new_loop_vec_info (struct loop *loop) ...@@ -1185,6 +1239,7 @@ new_loop_vec_info (struct loop *loop)
VARRAY_GENERIC_PTR_INIT (LOOP_VINFO_DATAREF_READS (res), 20, VARRAY_GENERIC_PTR_INIT (LOOP_VINFO_DATAREF_READS (res), 20,
"loop_read_datarefs"); "loop_read_datarefs");
LOOP_VINFO_UNALIGNED_DR (res) = NULL; LOOP_VINFO_UNALIGNED_DR (res) = NULL;
LOOP_VINFO_LOC (res) = UNKNOWN_LOC;
return res; return res;
} }
...@@ -1238,42 +1293,18 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo) ...@@ -1238,42 +1293,18 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo)
For vectorization statistics dumps. */ For vectorization statistics dumps. */
static bool static bool
vect_debug_stats (struct loop *loop) vect_debug_stats (LOC loc)
{ {
basic_block bb;
block_stmt_iterator si;
tree node = NULL_TREE;
if (!dump_file || !(dump_flags & TDF_STATS)) if (!dump_file || !(dump_flags & TDF_STATS))
return false; return false;
if (!loop) if (loc == UNKNOWN_LOC)
{
fprintf (dump_file, "\n"); fprintf (dump_file, "\n");
return true; else
}
if (!loop->header)
return false;
bb = loop->header;
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{
node = bsi_stmt (si);
if (node && EXPR_P (node) && EXPR_LOCUS (node))
break;
}
if (node && EXPR_P (node) && EXPR_LOCUS (node)
&& EXPR_FILENAME (node) && EXPR_LINENO (node))
{
fprintf (dump_file, "\nloop at %s:%d: ", fprintf (dump_file, "\nloop at %s:%d: ",
EXPR_FILENAME (node), EXPR_LINENO (node)); LOC_FILE (loc), LOC_LINE (loc));
return true;
}
return false; return true;
} }
...@@ -1282,42 +1313,18 @@ vect_debug_stats (struct loop *loop) ...@@ -1282,42 +1313,18 @@ vect_debug_stats (struct loop *loop)
For vectorization debug dumps. */ For vectorization debug dumps. */
static bool static bool
vect_debug_details (struct loop *loop) vect_debug_details (LOC loc)
{ {
basic_block bb;
block_stmt_iterator si;
tree node = NULL_TREE;
if (!dump_file || !(dump_flags & TDF_DETAILS)) if (!dump_file || !(dump_flags & TDF_DETAILS))
return false; return false;
if (!loop) if (loc == UNKNOWN_LOC)
{
fprintf (dump_file, "\n"); fprintf (dump_file, "\n");
return true; else
}
if (!loop->header)
return false;
bb = loop->header;
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{
node = bsi_stmt (si);
if (node && EXPR_P (node) && EXPR_LOCUS (node))
break;
}
if (node && EXPR_P (node) && EXPR_LOCUS (node)
&& EXPR_FILENAME (node) && EXPR_LINENO (node))
{
fprintf (dump_file, "\nloop at %s:%d: ", fprintf (dump_file, "\nloop at %s:%d: ",
EXPR_FILENAME (node), EXPR_LINENO (node)); LOC_FILE (loc), LOC_LINE (loc));
return true;
}
return false; return true;
} }
...@@ -1470,7 +1477,7 @@ vect_analyze_offset_expr (tree expr, ...@@ -1470,7 +1477,7 @@ vect_analyze_offset_expr (tree expr,
if (!BINARY_CLASS_P (expr)) if (!BINARY_CLASS_P (expr))
{ {
/* We expect to get binary expressions (PLUS/MINUS and MULT). */ /* We expect to get binary expressions (PLUS/MINUS and MULT). */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Not binary expression "); fprintf (dump_file, "Not binary expression ");
print_generic_expr (dump_file, expr, TDF_SLIM); print_generic_expr (dump_file, expr, TDF_SLIM);
...@@ -1715,7 +1722,7 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1715,7 +1722,7 @@ vect_get_base_and_offset (struct data_reference *dr,
/* Check that there is no remainder in bits. */ /* Check that there is no remainder in bits. */
if (pbitpos%BITS_PER_UNIT) if (pbitpos%BITS_PER_UNIT)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "bit offset alignment."); fprintf (dump_file, "bit offset alignment.");
return NULL_TREE; return NULL_TREE;
} }
...@@ -1744,7 +1751,7 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1744,7 +1751,7 @@ vect_get_base_and_offset (struct data_reference *dr,
*initial_offset = size_binop (PLUS_EXPR, *initial_offset, this_offset); *initial_offset = size_binop (PLUS_EXPR, *initial_offset, this_offset);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
print_generic_expr (dump_file, expr, TDF_SLIM); print_generic_expr (dump_file, expr, TDF_SLIM);
fprintf (dump_file, "\n --> total offset for ref: "); fprintf (dump_file, "\n --> total offset for ref: ");
...@@ -1965,7 +1972,7 @@ vect_create_addr_base_for_vector_ref (tree stmt, ...@@ -1965,7 +1972,7 @@ vect_create_addr_base_for_vector_ref (tree stmt,
TREE_OPERAND (vec_stmt, 0) = new_temp; TREE_OPERAND (vec_stmt, 0) = new_temp;
append_to_statement_list_force (vec_stmt, new_stmt_list); append_to_statement_list_force (vec_stmt, new_stmt_list);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "created "); fprintf (dump_file, "created ");
print_generic_expr (dump_file, vec_stmt, TDF_SLIM); print_generic_expr (dump_file, vec_stmt, TDF_SLIM);
...@@ -1996,7 +2003,7 @@ get_vectype_for_scalar_type (tree scalar_type) ...@@ -1996,7 +2003,7 @@ get_vectype_for_scalar_type (tree scalar_type)
nunits = UNITS_PER_SIMD_WORD / nbytes; nunits = UNITS_PER_SIMD_WORD / nbytes;
vectype = build_vector_type (scalar_type, nunits); vectype = build_vector_type (scalar_type, nunits);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "get vectype with %d units of type ", nunits); fprintf (dump_file, "get vectype with %d units of type ", nunits);
print_generic_expr (dump_file, scalar_type, TDF_SLIM); print_generic_expr (dump_file, scalar_type, TDF_SLIM);
...@@ -2005,7 +2012,7 @@ get_vectype_for_scalar_type (tree scalar_type) ...@@ -2005,7 +2012,7 @@ get_vectype_for_scalar_type (tree scalar_type)
if (!vectype) if (!vectype)
return NULL_TREE; return NULL_TREE;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "vectype: "); fprintf (dump_file, "vectype: ");
print_generic_expr (dump_file, vectype, TDF_SLIM); print_generic_expr (dump_file, vectype, TDF_SLIM);
...@@ -2016,7 +2023,7 @@ get_vectype_for_scalar_type (tree scalar_type) ...@@ -2016,7 +2023,7 @@ get_vectype_for_scalar_type (tree scalar_type)
/* TODO: tree-complex.c sometimes can parallelize operations /* TODO: tree-complex.c sometimes can parallelize operations
on generic vectors. We can vectorize the loop in that case, on generic vectors. We can vectorize the loop in that case,
but then we should re-run the lowering pass. */ but then we should re-run the lowering pass. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "mode not supported by target."); fprintf (dump_file, "mode not supported by target.");
return NULL_TREE; return NULL_TREE;
} }
...@@ -2120,7 +2127,7 @@ vect_create_data_ref_ptr (tree stmt, block_stmt_iterator *bsi, tree offset, ...@@ -2120,7 +2127,7 @@ vect_create_data_ref_ptr (tree stmt, block_stmt_iterator *bsi, tree offset,
tree type, tmp, size; tree type, tmp, size;
base_name = unshare_expr (DR_BASE_NAME (dr)); base_name = unshare_expr (DR_BASE_NAME (dr));
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
tree data_ref_base = base_name; tree data_ref_base = base_name;
fprintf (dump_file, "create array_ref of type: "); fprintf (dump_file, "create array_ref of type: ");
...@@ -2287,7 +2294,7 @@ vect_init_vector (tree stmt, tree vector_var) ...@@ -2287,7 +2294,7 @@ vect_init_vector (tree stmt, tree vector_var)
new_bb = bsi_insert_on_edge_immediate (pe, init_stmt); new_bb = bsi_insert_on_edge_immediate (pe, init_stmt);
gcc_assert (!new_bb); gcc_assert (!new_bb);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "created new init_stmt: "); fprintf (dump_file, "created new init_stmt: ");
print_generic_expr (dump_file, init_stmt, TDF_SLIM); print_generic_expr (dump_file, init_stmt, TDF_SLIM);
...@@ -2327,7 +2334,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2327,7 +2334,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
tree def; tree def;
int i; int i;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "vect_get_vec_def_for_operand: "); fprintf (dump_file, "vect_get_vec_def_for_operand: ");
print_generic_expr (dump_file, op, TDF_SLIM); print_generic_expr (dump_file, op, TDF_SLIM);
...@@ -2342,7 +2349,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2342,7 +2349,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
tree vec_cst; tree vec_cst;
/* Build a tree with vector elements. */ /* Build a tree with vector elements. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "Create vector_cst. nunits = %d", nunits); fprintf (dump_file, "Create vector_cst. nunits = %d", nunits);
for (i = nunits - 1; i >= 0; --i) for (i = nunits - 1; i >= 0; --i)
...@@ -2360,7 +2367,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2360,7 +2367,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
def_stmt = SSA_NAME_DEF_STMT (op); def_stmt = SSA_NAME_DEF_STMT (op);
def_stmt_info = vinfo_for_stmt (def_stmt); def_stmt_info = vinfo_for_stmt (def_stmt);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "vect_get_vec_def_for_operand: def_stmt: "); fprintf (dump_file, "vect_get_vec_def_for_operand: def_stmt: ");
print_generic_expr (dump_file, def_stmt, TDF_SLIM); print_generic_expr (dump_file, def_stmt, TDF_SLIM);
...@@ -2386,7 +2393,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2386,7 +2393,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
bb = bb_for_stmt (def_stmt); bb = bb_for_stmt (def_stmt);
if (TREE_CODE (def_stmt) == PHI_NODE && flow_bb_inside_loop_p (loop, bb)) if (TREE_CODE (def_stmt) == PHI_NODE && flow_bb_inside_loop_p (loop, bb))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "reduction/induction - unsupported."); fprintf (dump_file, "reduction/induction - unsupported.");
internal_error ("no support for reduction/induction"); /* FORNOW */ internal_error ("no support for reduction/induction"); /* FORNOW */
} }
...@@ -2409,7 +2416,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2409,7 +2416,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
def = op; def = op;
break; break;
default: default:
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "unsupported defining stmt: "); fprintf (dump_file, "unsupported defining stmt: ");
print_generic_expr (dump_file, def_stmt, TDF_SLIM); print_generic_expr (dump_file, def_stmt, TDF_SLIM);
...@@ -2419,7 +2426,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt) ...@@ -2419,7 +2426,7 @@ vect_get_vec_def_for_operand (tree op, tree stmt)
/* Build a tree with vector elements. Create 'vec_inv = {inv,inv,..,inv}' */ /* Build a tree with vector elements. Create 'vec_inv = {inv,inv,..,inv}' */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "Create vector_inv."); fprintf (dump_file, "Create vector_inv.");
for (i = nunits - 1; i >= 0; --i) for (i = nunits - 1; i >= 0; --i)
...@@ -2441,7 +2448,7 @@ vect_finish_stmt_generation (tree stmt, tree vec_stmt, block_stmt_iterator *bsi) ...@@ -2441,7 +2448,7 @@ vect_finish_stmt_generation (tree stmt, tree vec_stmt, block_stmt_iterator *bsi)
{ {
bsi_insert_before (bsi, vec_stmt, BSI_SAME_STMT); bsi_insert_before (bsi, vec_stmt, BSI_SAME_STMT);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "add new stmt: "); fprintf (dump_file, "add new stmt: ");
print_generic_expr (dump_file, vec_stmt, TDF_SLIM); print_generic_expr (dump_file, vec_stmt, TDF_SLIM);
...@@ -2491,7 +2498,7 @@ vectorizable_assignment (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2491,7 +2498,7 @@ vectorizable_assignment (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
op = TREE_OPERAND (stmt, 1); op = TREE_OPERAND (stmt, 1);
if (!vect_is_simple_use (op, loop_vinfo, NULL)) if (!vect_is_simple_use (op, loop_vinfo, NULL))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "use not simple."); fprintf (dump_file, "use not simple.");
return false; return false;
} }
...@@ -2503,7 +2510,7 @@ vectorizable_assignment (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2503,7 +2510,7 @@ vectorizable_assignment (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
} }
/** Transform. **/ /** Transform. **/
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "transform assignment."); fprintf (dump_file, "transform assignment.");
/* Handle def. */ /* Handle def. */
...@@ -2564,7 +2571,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2564,7 +2571,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
op_type = TREE_CODE_LENGTH (code); op_type = TREE_CODE_LENGTH (code);
if (op_type != unary_op && op_type != binary_op) if (op_type != unary_op && op_type != binary_op)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "num. args = %d (not unary/binary op).", op_type); fprintf (dump_file, "num. args = %d (not unary/binary op).", op_type);
return false; return false;
} }
...@@ -2574,7 +2581,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2574,7 +2581,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
op = TREE_OPERAND (operation, i); op = TREE_OPERAND (operation, i);
if (!vect_is_simple_use (op, loop_vinfo, NULL)) if (!vect_is_simple_use (op, loop_vinfo, NULL))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "use not simple."); fprintf (dump_file, "use not simple.");
return false; return false;
} }
...@@ -2583,14 +2590,14 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2583,14 +2590,14 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
/* Supportable by target? */ /* Supportable by target? */
if (!optab) if (!optab)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "no optab."); fprintf (dump_file, "no optab.");
return false; return false;
} }
vec_mode = TYPE_MODE (vectype); vec_mode = TYPE_MODE (vectype);
if (optab->handlers[(int) vec_mode].insn_code == CODE_FOR_nothing) if (optab->handlers[(int) vec_mode].insn_code == CODE_FOR_nothing)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "op not supported by target."); fprintf (dump_file, "op not supported by target.");
return false; return false;
} }
...@@ -2603,7 +2610,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2603,7 +2610,7 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
/** Transform. **/ /** Transform. **/
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "transform binary/unary operation."); fprintf (dump_file, "transform binary/unary operation.");
/* Handle def. */ /* Handle def. */
...@@ -2672,7 +2679,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2672,7 +2679,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
op = TREE_OPERAND (stmt, 1); op = TREE_OPERAND (stmt, 1);
if (!vect_is_simple_use (op, loop_vinfo, NULL)) if (!vect_is_simple_use (op, loop_vinfo, NULL))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "use not simple."); fprintf (dump_file, "use not simple.");
return false; return false;
} }
...@@ -2695,7 +2702,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2695,7 +2702,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
/** Transform. **/ /** Transform. **/
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "transform store"); fprintf (dump_file, "transform store");
alignment_support_cheme = vect_supportable_dr_alignment (dr); alignment_support_cheme = vect_supportable_dr_alignment (dr);
...@@ -2770,7 +2777,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2770,7 +2777,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
(e.g. - data copies). */ (e.g. - data copies). */
if (mov_optab->handlers[mode].insn_code == CODE_FOR_nothing) if (mov_optab->handlers[mode].insn_code == CODE_FOR_nothing)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "Aligned load, but unsupported type."); fprintf (dump_file, "Aligned load, but unsupported type.");
return false; return false;
} }
...@@ -2783,7 +2790,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt) ...@@ -2783,7 +2790,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
/** Transform. **/ /** Transform. **/
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "transform load."); fprintf (dump_file, "transform load.");
alignment_support_cheme = vect_supportable_dr_alignment (dr); alignment_support_cheme = vect_supportable_dr_alignment (dr);
...@@ -2990,7 +2997,7 @@ vect_transform_stmt (tree stmt, block_stmt_iterator *bsi) ...@@ -2990,7 +2997,7 @@ vect_transform_stmt (tree stmt, block_stmt_iterator *bsi)
is_store = true; is_store = true;
break; break;
default: default:
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "stmt not supported."); fprintf (dump_file, "stmt not supported.");
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -3163,7 +3170,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters, ...@@ -3163,7 +3170,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
/* Skip virtual phi's. */ /* Skip virtual phi's. */
if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi)))) if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi))))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "virtual phi. skip."); fprintf (dump_file, "virtual phi. skip.");
continue; continue;
} }
...@@ -3227,7 +3234,7 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio, ...@@ -3227,7 +3234,7 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio,
int loop_num; int loop_num;
#endif #endif
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_transtorm_for_unknown_loop_bound>>\n"); fprintf (dump_file, "\n<<vect_transtorm_for_unknown_loop_bound>>\n");
/* Generate the following variables on the preheader of original loop: /* Generate the following variables on the preheader of original loop:
...@@ -3429,7 +3436,7 @@ vect_do_peeling_for_alignment (loop_vec_info loop_vinfo, struct loops *loops) ...@@ -3429,7 +3436,7 @@ vect_do_peeling_for_alignment (loop_vec_info loop_vinfo, struct loops *loops)
tree n_iters; tree n_iters;
struct loop *new_loop; struct loop *new_loop;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_do_peeling_for_alignment>>\n"); fprintf (dump_file, "\n<<vect_do_peeling_for_alignment>>\n");
ni_name = vect_build_loop_niters (loop_vinfo); ni_name = vect_build_loop_niters (loop_vinfo);
...@@ -3477,7 +3484,7 @@ vect_transform_loop (loop_vec_info loop_vinfo, ...@@ -3477,7 +3484,7 @@ vect_transform_loop (loop_vec_info loop_vinfo,
tree ratio = NULL; tree ratio = NULL;
int vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo); int vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vec_transform_loop>>\n"); fprintf (dump_file, "\n<<vec_transform_loop>>\n");
...@@ -3526,7 +3533,7 @@ vect_transform_loop (loop_vec_info loop_vinfo, ...@@ -3526,7 +3533,7 @@ vect_transform_loop (loop_vec_info loop_vinfo,
stmt_vec_info stmt_info; stmt_vec_info stmt_info;
bool is_store; bool is_store;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "------>vectorizing statement: "); fprintf (dump_file, "------>vectorizing statement: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -3546,7 +3553,7 @@ vect_transform_loop (loop_vec_info loop_vinfo, ...@@ -3546,7 +3553,7 @@ vect_transform_loop (loop_vec_info loop_vinfo,
== vectorization_factor); == vectorization_factor);
#endif #endif
/* -------- vectorize statement ------------ */ /* -------- vectorize statement ------------ */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "transform statement."); fprintf (dump_file, "transform statement.");
is_store = vect_transform_stmt (stmt, &si); is_store = vect_transform_stmt (stmt, &si);
...@@ -3566,9 +3573,9 @@ vect_transform_loop (loop_vec_info loop_vinfo, ...@@ -3566,9 +3573,9 @@ vect_transform_loop (loop_vec_info loop_vinfo,
slpeel_make_loop_iterate_ntimes (loop, ratio); slpeel_make_loop_iterate_ntimes (loop, ratio);
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file,"Success! loop vectorized."); fprintf (dump_file,"Success! loop vectorized.");
if (vect_debug_stats (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "LOOP VECTORIZED."); fprintf (dump_file, "LOOP VECTORIZED.");
} }
...@@ -3605,7 +3612,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def) ...@@ -3605,7 +3612,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def)
def_stmt = SSA_NAME_DEF_STMT (operand); def_stmt = SSA_NAME_DEF_STMT (operand);
if (def_stmt == NULL_TREE ) if (def_stmt == NULL_TREE )
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "no def_stmt."); fprintf (dump_file, "no def_stmt.");
return false; return false;
} }
...@@ -3617,7 +3624,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def) ...@@ -3617,7 +3624,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def)
tree arg = TREE_OPERAND (def_stmt, 0); tree arg = TREE_OPERAND (def_stmt, 0);
if (TREE_CODE (arg) == INTEGER_CST || TREE_CODE (arg) == REAL_CST) if (TREE_CODE (arg) == INTEGER_CST || TREE_CODE (arg) == REAL_CST)
return true; return true;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Unexpected empty stmt: "); fprintf (dump_file, "Unexpected empty stmt: ");
print_generic_expr (dump_file, def_stmt, TDF_SLIM); print_generic_expr (dump_file, def_stmt, TDF_SLIM);
...@@ -3630,7 +3637,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def) ...@@ -3630,7 +3637,7 @@ vect_is_simple_use (tree operand, loop_vec_info loop_vinfo, tree *def)
bb = bb_for_stmt (def_stmt); bb = bb_for_stmt (def_stmt);
if (TREE_CODE (def_stmt) == PHI_NODE && flow_bb_inside_loop_p (loop, bb)) if (TREE_CODE (def_stmt) == PHI_NODE && flow_bb_inside_loop_p (loop, bb))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "reduction/induction - unsupported."); fprintf (dump_file, "reduction/induction - unsupported.");
return false; /* FORNOW: not supported yet. */ return false; /* FORNOW: not supported yet. */
} }
...@@ -3664,7 +3671,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3664,7 +3671,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
bool ok; bool ok;
tree scalar_type; tree scalar_type;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_operations>>\n"); fprintf (dump_file, "\n<<vect_analyze_operations>>\n");
for (i = 0; i < nbbs; i++) for (i = 0; i < nbbs; i++)
...@@ -3678,7 +3685,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3678,7 +3685,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
stmt_vec_info stmt_info = vinfo_for_stmt (stmt); stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
tree vectype; tree vectype;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "==> examining statement: "); fprintf (dump_file, "==> examining statement: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -3695,14 +3702,15 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3695,14 +3702,15 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
if (!STMT_VINFO_RELEVANT_P (stmt_info)) if (!STMT_VINFO_RELEVANT_P (stmt_info))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "irrelevant."); fprintf (dump_file, "irrelevant.");
continue; continue;
} }
if (VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (stmt)))) if (VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (stmt))))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, "not vectorized: vector stmt in loop:"); fprintf (dump_file, "not vectorized: vector stmt in loop:");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -3717,7 +3725,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3717,7 +3725,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
else else
scalar_type = TREE_TYPE (stmt); scalar_type = TREE_TYPE (stmt);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "get vectype for scalar type: "); fprintf (dump_file, "get vectype for scalar type: ");
print_generic_expr (dump_file, scalar_type, TDF_SLIM); print_generic_expr (dump_file, scalar_type, TDF_SLIM);
...@@ -3726,7 +3734,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3726,7 +3734,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
vectype = get_vectype_for_scalar_type (scalar_type); vectype = get_vectype_for_scalar_type (scalar_type);
if (!vectype) if (!vectype)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, "not vectorized: unsupported data-type "); fprintf (dump_file, "not vectorized: unsupported data-type ");
print_generic_expr (dump_file, scalar_type, TDF_SLIM); print_generic_expr (dump_file, scalar_type, TDF_SLIM);
...@@ -3734,7 +3743,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3734,7 +3743,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
return false; return false;
} }
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "vectype: "); fprintf (dump_file, "vectype: ");
print_generic_expr (dump_file, vectype, TDF_SLIM); print_generic_expr (dump_file, vectype, TDF_SLIM);
...@@ -3748,7 +3757,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3748,7 +3757,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
if (!ok) if (!ok)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, "not vectorized: stmt not supported: "); fprintf (dump_file, "not vectorized: stmt not supported: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -3757,7 +3767,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3757,7 +3767,7 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
} }
nunits = GET_MODE_NUNITS (TYPE_MODE (vectype)); nunits = GET_MODE_NUNITS (TYPE_MODE (vectype));
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "nunits = %d", nunits); fprintf (dump_file, "nunits = %d", nunits);
if (vectorization_factor) if (vectorization_factor)
...@@ -3766,7 +3776,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3766,7 +3776,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
This restriction will be relaxed in the future. */ This restriction will be relaxed in the future. */
if (nunits != vectorization_factor) if (nunits != vectorization_factor)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: mixed data-types"); fprintf (dump_file, "not vectorized: mixed data-types");
return false; return false;
} }
...@@ -3785,13 +3796,15 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3785,13 +3796,15 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
if (vectorization_factor <= 1) if (vectorization_factor <= 1)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unsupported data-type"); fprintf (dump_file, "not vectorized: unsupported data-type");
return false; return false;
} }
LOOP_VINFO_VECT_FACTOR (loop_vinfo) = vectorization_factor; LOOP_VINFO_VECT_FACTOR (loop_vinfo) = vectorization_factor;
if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) && vect_debug_details (NULL)) if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
&& vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, fprintf (dump_file,
"vectorization_factor = %d, niters = " HOST_WIDE_INT_PRINT_DEC, "vectorization_factor = %d, niters = " HOST_WIDE_INT_PRINT_DEC,
vectorization_factor, LOOP_VINFO_INT_NITERS (loop_vinfo)); vectorization_factor, LOOP_VINFO_INT_NITERS (loop_vinfo));
...@@ -3799,7 +3812,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3799,7 +3812,8 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
&& LOOP_VINFO_INT_NITERS (loop_vinfo) < vectorization_factor) && LOOP_VINFO_INT_NITERS (loop_vinfo) < vectorization_factor)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: iteration count too small."); fprintf (dump_file, "not vectorized: iteration count too small.");
return false; return false;
} }
...@@ -3807,17 +3821,20 @@ vect_analyze_operations (loop_vec_info loop_vinfo) ...@@ -3807,17 +3821,20 @@ vect_analyze_operations (loop_vec_info loop_vinfo)
if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
|| LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0) || LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "epilog loop required."); fprintf (dump_file, "epilog loop required.");
if (!vect_can_advance_ivs_p (loop_vinfo)) if (!vect_can_advance_ivs_p (loop_vinfo))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: can't create epilog loop 1."); fprintf (dump_file, "not vectorized: can't create epilog loop 1.");
return false; return false;
} }
if (!slpeel_can_duplicate_loop_p (loop, loop->exit_edges[0])) if (!slpeel_can_duplicate_loop_p (loop, loop->exit_edges[0]))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: can't create epilog loop 2."); fprintf (dump_file, "not vectorized: can't create epilog loop 2.");
return false; return false;
} }
...@@ -3899,7 +3916,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init, ...@@ -3899,7 +3916,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init,
step_expr = evolution_part; step_expr = evolution_part;
init_expr = unshare_expr (initial_condition_in_loop_num (access_fn, loop_nb)); init_expr = unshare_expr (initial_condition_in_loop_num (access_fn, loop_nb));
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "step: "); fprintf (dump_file, "step: ");
print_generic_expr (dump_file, step_expr, TDF_SLIM); print_generic_expr (dump_file, step_expr, TDF_SLIM);
...@@ -3912,7 +3929,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init, ...@@ -3912,7 +3929,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init,
if (TREE_CODE (step_expr) != INTEGER_CST) if (TREE_CODE (step_expr) != INTEGER_CST)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "step unknown."); fprintf (dump_file, "step unknown.");
return false; return false;
} }
...@@ -3920,7 +3937,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init, ...@@ -3920,7 +3937,7 @@ vect_is_simple_iv_evolution (unsigned loop_nb, tree access_fn, tree * init,
if (strict) if (strict)
if (!integer_onep (step_expr)) if (!integer_onep (step_expr))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
print_generic_expr (dump_file, step_expr, TDF_SLIM); print_generic_expr (dump_file, step_expr, TDF_SLIM);
return false; return false;
} }
...@@ -3973,14 +3990,14 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo) ...@@ -3973,14 +3990,14 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
basic_block bb = loop->header; basic_block bb = loop->header;
tree dummy; tree dummy;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_scalar_cycles>>\n"); fprintf (dump_file, "\n<<vect_analyze_scalar_cycles>>\n");
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi)) for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{ {
tree access_fn = NULL; tree access_fn = NULL;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Analyze phi: "); fprintf (dump_file, "Analyze phi: ");
print_generic_expr (dump_file, phi, TDF_SLIM); print_generic_expr (dump_file, phi, TDF_SLIM);
...@@ -3991,7 +4008,7 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo) ...@@ -3991,7 +4008,7 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi)))) if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi))))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "virtual phi. skip."); fprintf (dump_file, "virtual phi. skip.");
continue; continue;
} }
...@@ -4013,12 +4030,13 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo) ...@@ -4013,12 +4030,13 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
if (!access_fn) if (!access_fn)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unsupported scalar cycle."); fprintf (dump_file, "not vectorized: unsupported scalar cycle.");
return false; return false;
} }
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Access function of PHI: "); fprintf (dump_file, "Access function of PHI: ");
print_generic_expr (dump_file, access_fn, TDF_SLIM); print_generic_expr (dump_file, access_fn, TDF_SLIM);
...@@ -4027,7 +4045,8 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo) ...@@ -4027,7 +4045,8 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
if (!vect_is_simple_iv_evolution (loop->num, access_fn, &dummy, if (!vect_is_simple_iv_evolution (loop->num, access_fn, &dummy,
&dummy, false)) &dummy, false))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unsupported scalar cycle."); fprintf (dump_file, "not vectorized: unsupported scalar cycle.");
return false; return false;
} }
...@@ -4049,11 +4068,11 @@ vect_analyze_data_ref_dependence (struct data_reference *dra, ...@@ -4049,11 +4068,11 @@ vect_analyze_data_ref_dependence (struct data_reference *dra,
{ {
bool differ_p; bool differ_p;
struct data_dependence_relation *ddr; struct data_dependence_relation *ddr;
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
if (!array_base_name_differ_p (dra, drb, &differ_p)) if (!array_base_name_differ_p (dra, drb, &differ_p))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, fprintf (dump_file,
"not vectorized: can't determine dependence between: "); "not vectorized: can't determine dependence between: ");
...@@ -4073,7 +4092,8 @@ vect_analyze_data_ref_dependence (struct data_reference *dra, ...@@ -4073,7 +4092,8 @@ vect_analyze_data_ref_dependence (struct data_reference *dra,
if (DDR_ARE_DEPENDENT (ddr) == chrec_known) if (DDR_ARE_DEPENDENT (ddr) == chrec_known)
return false; return false;
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, fprintf (dump_file,
"not vectorized: possible dependence between data-refs "); "not vectorized: possible dependence between data-refs ");
...@@ -4103,10 +4123,10 @@ vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo) ...@@ -4103,10 +4123,10 @@ vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo)
/* Examine store-store (output) dependences. */ /* Examine store-store (output) dependences. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_dependences>>\n"); fprintf (dump_file, "\n<<vect_analyze_dependences>>\n");
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "compare all store-store pairs."); fprintf (dump_file, "compare all store-store pairs.");
for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_refs); i++) for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_refs); i++)
...@@ -4124,7 +4144,7 @@ vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo) ...@@ -4124,7 +4144,7 @@ vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo)
/* Examine load-store (true/anti) dependences. */ /* Examine load-store (true/anti) dependences. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "compare all load-store pairs."); fprintf (dump_file, "compare all load-store pairs.");
for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_read_refs); i++) for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_read_refs); i++)
...@@ -4166,7 +4186,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4166,7 +4186,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
bool base_aligned_p; bool base_aligned_p;
tree misalign; tree misalign;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "vect_compute_data_ref_alignment:"); fprintf (dump_file, "vect_compute_data_ref_alignment:");
/* Initialize misalignment to unknown. */ /* Initialize misalignment to unknown. */
...@@ -4179,7 +4199,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4179,7 +4199,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
if (!misalign) if (!misalign)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Unknown alignment for access: "); fprintf (dump_file, "Unknown alignment for access: ");
print_generic_expr (dump_file, base, TDF_SLIM); print_generic_expr (dump_file, base, TDF_SLIM);
...@@ -4191,7 +4211,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4191,7 +4211,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
{ {
if (!vect_can_force_dr_alignment_p (base, TYPE_ALIGN (vectype))) if (!vect_can_force_dr_alignment_p (base, TYPE_ALIGN (vectype)))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "can't force alignment of ref: "); fprintf (dump_file, "can't force alignment of ref: ");
print_generic_expr (dump_file, ref, TDF_SLIM); print_generic_expr (dump_file, ref, TDF_SLIM);
...@@ -4202,7 +4222,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4202,7 +4222,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
/* Force the alignment of the decl. /* Force the alignment of the decl.
NOTE: This is the only change to the code we make during NOTE: This is the only change to the code we make during
the analysis phase, before deciding to vectorize the loop. */ the analysis phase, before deciding to vectorize the loop. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "force alignment"); fprintf (dump_file, "force alignment");
DECL_ALIGN (base) = TYPE_ALIGN (vectype); DECL_ALIGN (base) = TYPE_ALIGN (vectype);
DECL_USER_ALIGN (base) = 1; DECL_USER_ALIGN (base) = 1;
...@@ -4221,14 +4241,14 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4221,14 +4241,14 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
if (tree_int_cst_sgn (misalign) < 0) if (tree_int_cst_sgn (misalign) < 0)
{ {
/* Negative misalignment value. */ /* Negative misalignment value. */
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "unexpected misalign value"); fprintf (dump_file, "unexpected misalign value");
return false; return false;
} }
DR_MISALIGNMENT (dr) = tree_low_cst (misalign, 1); DR_MISALIGNMENT (dr) = tree_low_cst (misalign, 1);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "misalign = %d", DR_MISALIGNMENT (dr)); fprintf (dump_file, "misalign = %d", DR_MISALIGNMENT (dr));
return true; return true;
...@@ -4284,7 +4304,6 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4284,7 +4304,6 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
{ {
varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo); varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo);
varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo); varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo);
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
unsigned int i; unsigned int i;
/* /*
...@@ -4399,12 +4418,12 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4399,12 +4418,12 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
if (!LOOP_VINFO_UNALIGNED_DR (loop_vinfo)) if (!LOOP_VINFO_UNALIGNED_DR (loop_vinfo))
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "Peeling for alignment will not be applied."); fprintf (dump_file, "Peeling for alignment will not be applied.");
return; return;
} }
else else
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "Peeling for alignment will be applied."); fprintf (dump_file, "Peeling for alignment will be applied.");
...@@ -4429,7 +4448,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4429,7 +4448,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
if (dr == LOOP_VINFO_UNALIGNED_DR (loop_vinfo)) if (dr == LOOP_VINFO_UNALIGNED_DR (loop_vinfo))
{ {
DR_MISALIGNMENT (dr) = 0; DR_MISALIGNMENT (dr) = 0;
if (vect_debug_details (loop) || vect_debug_stats (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "Alignment of access forced using peeling."); fprintf (dump_file, "Alignment of access forced using peeling.");
} }
else else
...@@ -4441,7 +4461,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4441,7 +4461,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
if (dr == LOOP_VINFO_UNALIGNED_DR (loop_vinfo)) if (dr == LOOP_VINFO_UNALIGNED_DR (loop_vinfo))
{ {
DR_MISALIGNMENT (dr) = 0; DR_MISALIGNMENT (dr) = 0;
if (vect_debug_details (loop) || vect_debug_stats (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "Alignment of access forced using peeling."); fprintf (dump_file, "Alignment of access forced using peeling.");
} }
else else
...@@ -4462,11 +4483,10 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4462,11 +4483,10 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo)
{ {
varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo); varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo);
varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo); varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo);
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
enum dr_alignment_support supportable_dr_alignment; enum dr_alignment_support supportable_dr_alignment;
unsigned int i; unsigned int i;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_data_refs_alignment>>\n"); fprintf (dump_file, "\n<<vect_analyze_data_refs_alignment>>\n");
...@@ -4475,7 +4495,8 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4475,7 +4495,8 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo)
if (!vect_compute_data_refs_alignment (loop_vinfo)) if (!vect_compute_data_refs_alignment (loop_vinfo))
{ {
if (vect_debug_details (loop) || vect_debug_stats (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, fprintf (dump_file,
"not vectorized: can't calculate alignment for data ref."); "not vectorized: can't calculate alignment for data ref.");
return false; return false;
...@@ -4497,12 +4518,14 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4497,12 +4518,14 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo)
supportable_dr_alignment = vect_supportable_dr_alignment (dr); supportable_dr_alignment = vect_supportable_dr_alignment (dr);
if (!supportable_dr_alignment) if (!supportable_dr_alignment)
{ {
if (vect_debug_details (loop) || vect_debug_stats (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unsupported unaligned load."); fprintf (dump_file, "not vectorized: unsupported unaligned load.");
return false; return false;
} }
if (supportable_dr_alignment != dr_aligned if (supportable_dr_alignment != dr_aligned
&& (vect_debug_details (loop) || vect_debug_stats (loop))) && (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo))))
fprintf (dump_file, "Vectorizing an unaligned access."); fprintf (dump_file, "Vectorizing an unaligned access.");
} }
for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_datarefs); i++) for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_datarefs); i++)
...@@ -4511,12 +4534,14 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -4511,12 +4534,14 @@ vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo)
supportable_dr_alignment = vect_supportable_dr_alignment (dr); supportable_dr_alignment = vect_supportable_dr_alignment (dr);
if (!supportable_dr_alignment) if (!supportable_dr_alignment)
{ {
if (vect_debug_details (loop) || vect_debug_stats (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unsupported unaligned store."); fprintf (dump_file, "not vectorized: unsupported unaligned store.");
return false; return false;
} }
if (supportable_dr_alignment != dr_aligned if (supportable_dr_alignment != dr_aligned
&& (vect_debug_details (loop) || vect_debug_stats (loop))) && (vect_debug_details (LOOP_LOC (loop_vinfo))
|| vect_debug_stats (LOOP_LOC (loop_vinfo))))
fprintf (dump_file, "Vectorizing an unaligned access."); fprintf (dump_file, "Vectorizing an unaligned access.");
} }
...@@ -4539,7 +4564,7 @@ vect_analyze_data_ref_access (struct data_reference *dr) ...@@ -4539,7 +4564,7 @@ vect_analyze_data_ref_access (struct data_reference *dr)
if (!step || tree_int_cst_compare (step, TYPE_SIZE_UNIT (scalar_type))) if (!step || tree_int_cst_compare (step, TYPE_SIZE_UNIT (scalar_type)))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "not consecutive access"); fprintf (dump_file, "not consecutive access");
return false; return false;
} }
...@@ -4563,7 +4588,7 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo) ...@@ -4563,7 +4588,7 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo)
varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo); varray_type loop_write_datarefs = LOOP_VINFO_DATAREF_WRITES (loop_vinfo);
varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo); varray_type loop_read_datarefs = LOOP_VINFO_DATAREF_READS (loop_vinfo);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_data_ref_accesses>>\n"); fprintf (dump_file, "\n<<vect_analyze_data_ref_accesses>>\n");
for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_datarefs); i++) for (i = 0; i < VARRAY_ACTIVE_SIZE (loop_write_datarefs); i++)
...@@ -4572,8 +4597,8 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo) ...@@ -4572,8 +4597,8 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo)
bool ok = vect_analyze_data_ref_access (dr); bool ok = vect_analyze_data_ref_access (dr);
if (!ok) if (!ok)
{ {
if (vect_debug_stats (LOOP_VINFO_LOOP (loop_vinfo)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_VINFO_LOOP (loop_vinfo))) || vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: complicated access pattern."); fprintf (dump_file, "not vectorized: complicated access pattern.");
return false; return false;
} }
...@@ -4585,8 +4610,8 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo) ...@@ -4585,8 +4610,8 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo)
bool ok = vect_analyze_data_ref_access (dr); bool ok = vect_analyze_data_ref_access (dr);
if (!ok) if (!ok)
{ {
if (vect_debug_stats (LOOP_VINFO_LOOP (loop_vinfo)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_VINFO_LOOP (loop_vinfo))) || vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: complicated access pattern."); fprintf (dump_file, "not vectorized: complicated access pattern.");
return false; return false;
} }
...@@ -4620,12 +4645,13 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4620,12 +4645,13 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
if (!access_fn) if (!access_fn)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: complicated pointer access."); fprintf (dump_file, "not vectorized: complicated pointer access.");
return NULL; return NULL;
} }
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Access function of ptr: "); fprintf (dump_file, "Access function of ptr: ");
print_generic_expr (dump_file, access_fn, TDF_SLIM); print_generic_expr (dump_file, access_fn, TDF_SLIM);
...@@ -4633,7 +4659,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4633,7 +4659,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
if (!vect_is_simple_iv_evolution (loopnum, access_fn, &init, &step, false)) if (!vect_is_simple_iv_evolution (loopnum, access_fn, &init, &step, false))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: pointer access is not simple."); fprintf (dump_file, "not vectorized: pointer access is not simple.");
return NULL; return NULL;
} }
...@@ -4642,7 +4669,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4642,7 +4669,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
if (!expr_invariant_in_loop_p (loop, init)) if (!expr_invariant_in_loop_p (loop, init))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, fprintf (dump_file,
"not vectorized: initial condition is not loop invariant."); "not vectorized: initial condition is not loop invariant.");
return NULL; return NULL;
...@@ -4650,7 +4678,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4650,7 +4678,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
if (TREE_CODE (step) != INTEGER_CST) if (TREE_CODE (step) != INTEGER_CST)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, fprintf (dump_file,
"not vectorized: non constant step for pointer access."); "not vectorized: non constant step for pointer access.");
return NULL; return NULL;
...@@ -4659,7 +4688,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4659,7 +4688,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
reftype = TREE_TYPE (TREE_OPERAND (memref, 0)); reftype = TREE_TYPE (TREE_OPERAND (memref, 0));
if (TREE_CODE (reftype) != POINTER_TYPE) if (TREE_CODE (reftype) != POINTER_TYPE)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unexpected pointer access form."); fprintf (dump_file, "not vectorized: unexpected pointer access form.");
return NULL; return NULL;
} }
...@@ -4667,7 +4697,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4667,7 +4697,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
reftype = TREE_TYPE (init); reftype = TREE_TYPE (init);
if (TREE_CODE (reftype) != POINTER_TYPE) if (TREE_CODE (reftype) != POINTER_TYPE)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unexpected pointer access form."); fprintf (dump_file, "not vectorized: unexpected pointer access form.");
return NULL; return NULL;
} }
...@@ -4676,7 +4707,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4676,7 +4707,8 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
if (tree_int_cst_compare (TYPE_SIZE_UNIT (innertype), step)) if (tree_int_cst_compare (TYPE_SIZE_UNIT (innertype), step))
{ {
/* FORNOW: support only consecutive access */ /* FORNOW: support only consecutive access */
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: non consecutive access."); fprintf (dump_file, "not vectorized: non consecutive access.");
return NULL; return NULL;
} }
...@@ -4692,7 +4724,7 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4692,7 +4724,7 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
indx_access_fn = indx_access_fn =
build_polynomial_chrec (loopnum, integer_zero_node, integer_one_node); build_polynomial_chrec (loopnum, integer_zero_node, integer_one_node);
if (vect_debug_details (NULL)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, "Access function of ptr indx: "); fprintf (dump_file, "Access function of ptr indx: ");
print_generic_expr (dump_file, indx_access_fn, TDF_SLIM); print_generic_expr (dump_file, indx_access_fn, TDF_SLIM);
...@@ -4766,7 +4798,7 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read, ...@@ -4766,7 +4798,7 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read,
} }
if (!tag) if (!tag)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "not vectorized: no memtag for ref."); fprintf (dump_file, "not vectorized: no memtag for ref.");
return NULL_TREE; return NULL_TREE;
} }
...@@ -4924,7 +4956,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -4924,7 +4956,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
int j; int j;
struct data_reference *dr; struct data_reference *dr;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_analyze_data_refs>>\n"); fprintf (dump_file, "\n<<vect_analyze_data_refs>>\n");
for (j = 0; j < nbbs; j++) for (j = 0; j < nbbs; j++)
...@@ -4956,7 +4988,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -4956,7 +4988,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (nvuses && (nv_may_defs || nv_must_defs)) if (nvuses && (nv_may_defs || nv_must_defs))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "unexpected vdefs and vuses in stmt: "); fprintf (dump_file, "unexpected vdefs and vuses in stmt: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -4966,7 +4998,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -4966,7 +4998,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (TREE_CODE (stmt) != MODIFY_EXPR) if (TREE_CODE (stmt) != MODIFY_EXPR)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "unexpected vops in stmt: "); fprintf (dump_file, "unexpected vops in stmt: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -4991,7 +5023,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -4991,7 +5023,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
vectype = get_vectype_for_scalar_type (scalar_type); vectype = get_vectype_for_scalar_type (scalar_type);
if (!vectype) if (!vectype)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "no vectype for stmt: "); fprintf (dump_file, "no vectype for stmt: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -5008,7 +5040,8 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -5008,7 +5040,8 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
vectype, &dr); vectype, &dr);
if (!symbl) if (!symbl)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo))
|| vect_debug_details (LOOP_LOC (loop_vinfo)))
{ {
fprintf (dump_file, "not vectorized: unhandled data ref: "); fprintf (dump_file, "not vectorized: unhandled data ref: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -5037,7 +5070,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt) ...@@ -5037,7 +5070,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt)
{ {
stmt_vec_info stmt_info; stmt_vec_info stmt_info;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "mark relevant."); fprintf (dump_file, "mark relevant.");
if (TREE_CODE (stmt) == PHI_NODE) if (TREE_CODE (stmt) == PHI_NODE)
...@@ -5050,7 +5083,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt) ...@@ -5050,7 +5083,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt)
if (!stmt_info) if (!stmt_info)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "mark relevant: no stmt info!!."); fprintf (dump_file, "mark relevant: no stmt info!!.");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -5060,7 +5093,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt) ...@@ -5060,7 +5093,7 @@ vect_mark_relevant (varray_type *worklist, tree stmt)
if (STMT_VINFO_RELEVANT_P (stmt_info)) if (STMT_VINFO_RELEVANT_P (stmt_info))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "already marked relevant."); fprintf (dump_file, "already marked relevant.");
return; return;
} }
...@@ -5101,7 +5134,7 @@ vect_stmt_relevant_p (tree stmt, loop_vec_info loop_vinfo) ...@@ -5101,7 +5134,7 @@ vect_stmt_relevant_p (tree stmt, loop_vec_info loop_vinfo)
v_must_defs = STMT_V_MUST_DEF_OPS (stmt); v_must_defs = STMT_V_MUST_DEF_OPS (stmt);
if (v_may_defs || v_must_defs) if (v_may_defs || v_must_defs)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "vec_stmt_relevant_p: stmt has vdefs."); fprintf (dump_file, "vec_stmt_relevant_p: stmt has vdefs.");
return true; return true;
} }
...@@ -5115,7 +5148,7 @@ vect_stmt_relevant_p (tree stmt, loop_vec_info loop_vinfo) ...@@ -5115,7 +5148,7 @@ vect_stmt_relevant_p (tree stmt, loop_vec_info loop_vinfo)
basic_block bb = bb_for_stmt (use); basic_block bb = bb_for_stmt (use);
if (!flow_bb_inside_loop_p (loop, bb)) if (!flow_bb_inside_loop_p (loop, bb))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "vec_stmt_relevant_p: used out of loop."); fprintf (dump_file, "vec_stmt_relevant_p: used out of loop.");
return true; return true;
} }
...@@ -5158,13 +5191,13 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5158,13 +5191,13 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
basic_block bb; basic_block bb;
tree phi; tree phi;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<vect_mark_stmts_to_be_vectorized>>\n"); fprintf (dump_file, "\n<<vect_mark_stmts_to_be_vectorized>>\n");
bb = loop->header; bb = loop->header;
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi)) for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "init: phi relevant? "); fprintf (dump_file, "init: phi relevant? ");
print_generic_expr (dump_file, phi, TDF_SLIM); print_generic_expr (dump_file, phi, TDF_SLIM);
...@@ -5172,7 +5205,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5172,7 +5205,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
if (vect_stmt_relevant_p (phi, loop_vinfo)) if (vect_stmt_relevant_p (phi, loop_vinfo))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "unsupported reduction/induction."); fprintf (dump_file, "unsupported reduction/induction.");
return false; return false;
} }
...@@ -5189,7 +5222,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5189,7 +5222,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
{ {
stmt = bsi_stmt (si); stmt = bsi_stmt (si);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "init: stmt relevant? "); fprintf (dump_file, "init: stmt relevant? ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -5211,7 +5244,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5211,7 +5244,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
stmt = VARRAY_TOP_TREE (worklist); stmt = VARRAY_TOP_TREE (worklist);
VARRAY_POP (worklist); VARRAY_POP (worklist);
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "worklist: examine stmt: "); fprintf (dump_file, "worklist: examine stmt: ");
print_generic_expr (dump_file, stmt, TDF_SLIM); print_generic_expr (dump_file, stmt, TDF_SLIM);
...@@ -5231,7 +5264,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5231,7 +5264,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
basic_block bb; basic_block bb;
if (!vect_is_simple_use (arg, loop_vinfo, &def_stmt)) if (!vect_is_simple_use (arg, loop_vinfo, &def_stmt))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "worklist: unsupported use."); fprintf (dump_file, "worklist: unsupported use.");
varray_clear (worklist); varray_clear (worklist);
return false; return false;
...@@ -5239,7 +5272,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5239,7 +5272,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
if (!def_stmt) if (!def_stmt)
continue; continue;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "worklist: def_stmt: "); fprintf (dump_file, "worklist: def_stmt: ");
print_generic_expr (dump_file, def_stmt, TDF_SLIM); print_generic_expr (dump_file, def_stmt, TDF_SLIM);
...@@ -5267,7 +5300,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5267,7 +5300,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
basic_block bb; basic_block bb;
if (!vect_is_simple_use (use, loop_vinfo, &def_stmt)) if (!vect_is_simple_use (use, loop_vinfo, &def_stmt))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "worklist: unsupported use."); fprintf (dump_file, "worklist: unsupported use.");
varray_clear (worklist); varray_clear (worklist);
return false; return false;
...@@ -5276,7 +5309,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) ...@@ -5276,7 +5309,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
if (!def_stmt) if (!def_stmt)
continue; continue;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "worklist: examine use %d: ", i); fprintf (dump_file, "worklist: examine use %d: ", i);
print_generic_expr (dump_file, use, TDF_SLIM); print_generic_expr (dump_file, use, TDF_SLIM);
...@@ -5317,7 +5350,7 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo) ...@@ -5317,7 +5350,7 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo)
tree access_fn = NULL; tree access_fn = NULL;
tree evolution_part; tree evolution_part;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Analyze phi: "); fprintf (dump_file, "Analyze phi: ");
print_generic_expr (dump_file, phi, TDF_SLIM); print_generic_expr (dump_file, phi, TDF_SLIM);
...@@ -5328,7 +5361,7 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo) ...@@ -5328,7 +5361,7 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo)
if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi)))) if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi))))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "virtual phi. skip."); fprintf (dump_file, "virtual phi. skip.");
continue; continue;
} }
...@@ -5340,12 +5373,12 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo) ...@@ -5340,12 +5373,12 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo)
if (!access_fn) if (!access_fn)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "No Access function."); fprintf (dump_file, "No Access function.");
return false; return false;
} }
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "Access function of PHI: "); fprintf (dump_file, "Access function of PHI: ");
print_generic_expr (dump_file, access_fn, TDF_SLIM); print_generic_expr (dump_file, access_fn, TDF_SLIM);
...@@ -5379,7 +5412,7 @@ vect_get_loop_niters (struct loop *loop, tree *number_of_iterations) ...@@ -5379,7 +5412,7 @@ vect_get_loop_niters (struct loop *loop, tree *number_of_iterations)
{ {
tree niters; tree niters;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<get_loop_niters>>\n"); fprintf (dump_file, "\n<<get_loop_niters>>\n");
niters = number_of_iterations_in_loop (loop); niters = number_of_iterations_in_loop (loop);
...@@ -5389,7 +5422,7 @@ vect_get_loop_niters (struct loop *loop, tree *number_of_iterations) ...@@ -5389,7 +5422,7 @@ vect_get_loop_niters (struct loop *loop, tree *number_of_iterations)
{ {
*number_of_iterations = niters; *number_of_iterations = niters;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
{ {
fprintf (dump_file, "==> get_loop_niters:" ); fprintf (dump_file, "==> get_loop_niters:" );
print_generic_expr (dump_file, *number_of_iterations, TDF_SLIM); print_generic_expr (dump_file, *number_of_iterations, TDF_SLIM);
...@@ -5417,8 +5450,11 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5417,8 +5450,11 @@ vect_analyze_loop_form (struct loop *loop)
tree loop_cond; tree loop_cond;
tree number_of_iterations = NULL; tree number_of_iterations = NULL;
bool rescan = false; bool rescan = false;
LOC loop_loc;
loop_loc = find_loop_location (loop);
if (vect_debug_details (loop)) if (vect_debug_details (loop_loc))
fprintf (dump_file, "\n<<vect_analyze_loop_form>>\n"); fprintf (dump_file, "\n<<vect_analyze_loop_form>>\n");
if (loop->inner if (loop->inner
...@@ -5427,7 +5463,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5427,7 +5463,7 @@ vect_analyze_loop_form (struct loop *loop)
|| EDGE_COUNT (loop->header->preds) != 2 || EDGE_COUNT (loop->header->preds) != 2
|| loop->num_entries != 1) || loop->num_entries != 1)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
{ {
fprintf (dump_file, "not vectorized: bad loop form. "); fprintf (dump_file, "not vectorized: bad loop form. ");
if (loop->inner) if (loop->inner)
...@@ -5451,7 +5487,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5451,7 +5487,7 @@ vect_analyze_loop_form (struct loop *loop)
executable statements, and the latch is empty. */ executable statements, and the latch is empty. */
if (!empty_block_p (loop->latch)) if (!empty_block_p (loop->latch))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
fprintf (dump_file, "not vectorized: unexpectd loop form."); fprintf (dump_file, "not vectorized: unexpectd loop form.");
return NULL; return NULL;
} }
...@@ -5479,7 +5515,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5479,7 +5515,7 @@ vect_analyze_loop_form (struct loop *loop)
if (empty_block_p (loop->header)) if (empty_block_p (loop->header))
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
fprintf (dump_file, "not vectorized: empty loop."); fprintf (dump_file, "not vectorized: empty loop.");
return NULL; return NULL;
} }
...@@ -5487,14 +5523,14 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5487,14 +5523,14 @@ vect_analyze_loop_form (struct loop *loop)
loop_cond = vect_get_loop_niters (loop, &number_of_iterations); loop_cond = vect_get_loop_niters (loop, &number_of_iterations);
if (!loop_cond) if (!loop_cond)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
fprintf (dump_file, "not vectorized: complicated exit condition."); fprintf (dump_file, "not vectorized: complicated exit condition.");
return NULL; return NULL;
} }
if (!number_of_iterations) if (!number_of_iterations)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
fprintf (dump_file, fprintf (dump_file,
"not vectorized: number of iterations cannot be computed."); "not vectorized: number of iterations cannot be computed.");
return NULL; return NULL;
...@@ -5502,7 +5538,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5502,7 +5538,7 @@ vect_analyze_loop_form (struct loop *loop)
if (chrec_contains_undetermined (number_of_iterations)) if (chrec_contains_undetermined (number_of_iterations))
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (loop_loc))
fprintf (dump_file, "Infinite number of iterations."); fprintf (dump_file, "Infinite number of iterations.");
return false; return false;
} }
...@@ -5512,7 +5548,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5512,7 +5548,7 @@ vect_analyze_loop_form (struct loop *loop)
if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)) if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo))
{ {
if (vect_debug_details (loop)) if (vect_debug_details (loop_loc))
{ {
fprintf (dump_file, "loop bound unknown.\n"); fprintf (dump_file, "loop bound unknown.\n");
fprintf (dump_file, "Symbolic number of iterations is "); fprintf (dump_file, "Symbolic number of iterations is ");
...@@ -5522,12 +5558,13 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -5522,12 +5558,13 @@ vect_analyze_loop_form (struct loop *loop)
else else
if (LOOP_VINFO_INT_NITERS (loop_vinfo) == 0) if (LOOP_VINFO_INT_NITERS (loop_vinfo) == 0)
{ {
if (vect_debug_stats (loop) || vect_debug_details (loop)) if (vect_debug_stats (loop_loc) || vect_debug_details (loop_loc))
fprintf (dump_file, "not vectorized: number of iterations = 0."); fprintf (dump_file, "not vectorized: number of iterations = 0.");
return NULL; return NULL;
} }
LOOP_VINFO_EXIT_COND (loop_vinfo) = loop_cond; LOOP_VINFO_EXIT_COND (loop_vinfo) = loop_cond;
LOOP_VINFO_LOC (loop_vinfo) = loop_loc;
return loop_vinfo; return loop_vinfo;
} }
...@@ -5545,7 +5582,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5545,7 +5582,7 @@ vect_analyze_loop (struct loop *loop)
bool ok; bool ok;
loop_vec_info loop_vinfo; loop_vec_info loop_vinfo;
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\n<<<<<<< analyze_loop_nest >>>>>>>\n"); fprintf (dump_file, "\n<<<<<<< analyze_loop_nest >>>>>>>\n");
/* Check the CFG characteristics of the loop (nesting, entry/exit, etc. */ /* Check the CFG characteristics of the loop (nesting, entry/exit, etc. */
...@@ -5553,7 +5590,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5553,7 +5590,7 @@ vect_analyze_loop (struct loop *loop)
loop_vinfo = vect_analyze_loop_form (loop); loop_vinfo = vect_analyze_loop_form (loop);
if (!loop_vinfo) if (!loop_vinfo)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "bad loop form."); fprintf (dump_file, "bad loop form.");
return NULL; return NULL;
} }
...@@ -5567,7 +5604,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5567,7 +5604,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_data_refs (loop_vinfo); ok = vect_analyze_data_refs (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad data references."); fprintf (dump_file, "bad data references.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5578,9 +5615,9 @@ vect_analyze_loop (struct loop *loop) ...@@ -5578,9 +5615,9 @@ vect_analyze_loop (struct loop *loop)
ok = vect_mark_stmts_to_be_vectorized (loop_vinfo); ok = vect_mark_stmts_to_be_vectorized (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "unexpected pattern."); fprintf (dump_file, "unexpected pattern.");
if (vect_debug_details (loop)) if (vect_debug_stats (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "not vectorized: unexpected pattern."); fprintf (dump_file, "not vectorized: unexpected pattern.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5592,7 +5629,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5592,7 +5629,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_scalar_cycles (loop_vinfo); ok = vect_analyze_scalar_cycles (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad scalar cycle."); fprintf (dump_file, "bad scalar cycle.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5604,7 +5641,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5604,7 +5641,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_data_ref_dependences (loop_vinfo); ok = vect_analyze_data_ref_dependences (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad data dependence."); fprintf (dump_file, "bad data dependence.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5616,7 +5653,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5616,7 +5653,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_data_ref_accesses (loop_vinfo); ok = vect_analyze_data_ref_accesses (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad data access."); fprintf (dump_file, "bad data access.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5628,7 +5665,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5628,7 +5665,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_data_refs_alignment (loop_vinfo); ok = vect_analyze_data_refs_alignment (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad data alignment."); fprintf (dump_file, "bad data alignment.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5640,7 +5677,7 @@ vect_analyze_loop (struct loop *loop) ...@@ -5640,7 +5677,7 @@ vect_analyze_loop (struct loop *loop)
ok = vect_analyze_operations (loop_vinfo); ok = vect_analyze_operations (loop_vinfo);
if (!ok) if (!ok)
{ {
if (vect_debug_details (loop)) if (vect_debug_details (LOOP_LOC (loop_vinfo)))
fprintf (dump_file, "bad operation or unsupported loop bound."); fprintf (dump_file, "bad operation or unsupported loop bound.");
destroy_loop_vec_info (loop_vinfo); destroy_loop_vec_info (loop_vinfo);
return NULL; return NULL;
...@@ -5679,7 +5716,7 @@ vectorize_loops (struct loops *loops) ...@@ -5679,7 +5716,7 @@ vectorize_loops (struct loops *loops)
/* FORNOW: until more sophisticated machine modelling is in place. */ /* FORNOW: until more sophisticated machine modelling is in place. */
if (!UNITS_PER_SIMD_WORD) if (!UNITS_PER_SIMD_WORD)
{ {
if (vect_debug_details (NULL)) if (vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "vectorizer: target vector size is not defined."); fprintf (dump_file, "vectorizer: target vector size is not defined.");
return; return;
} }
...@@ -5714,7 +5751,7 @@ vectorize_loops (struct loops *loops) ...@@ -5714,7 +5751,7 @@ vectorize_loops (struct loops *loops)
num_vectorized_loops++; num_vectorized_loops++;
} }
if (vect_debug_stats (NULL) || vect_debug_details (NULL)) if (vect_debug_stats (UNKNOWN_LOC) || vect_debug_details (UNKNOWN_LOC))
fprintf (dump_file, "\nvectorized %u loops in function.\n", fprintf (dump_file, "\nvectorized %u loops in function.\n",
num_vectorized_loops); num_vectorized_loops);
......
...@@ -22,6 +22,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -22,6 +22,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_TREE_VECTORIZER_H #ifndef GCC_TREE_VECTORIZER_H
#define GCC_TREE_VECTORIZER_H #define GCC_TREE_VECTORIZER_H
#ifdef USE_MAPPED_LOCATION
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)
#else
typedef source_locus LOC;
#define UNKNOWN_LOC NULL
#define EXPR_LOC(e) EXPR_LOCUS(e)
#define LOC_FILE(l) (l)->file
#define LOC_LINE(l) (l)->line
#endif
/* Used for naming of new temporaries. */ /* Used for naming of new temporaries. */
enum vect_var_kind { enum vect_var_kind {
vect_simple_var, vect_simple_var,
...@@ -78,6 +92,8 @@ typedef struct _loop_vec_info { ...@@ -78,6 +92,8 @@ typedef struct _loop_vec_info {
/* All data references in the loop that are being read from. */ /* All data references in the loop that are being read from. */
varray_type data_ref_reads; varray_type data_ref_reads;
/* The loop location in the source. */
LOC loop_line_number;
} *loop_vec_info; } *loop_vec_info;
/* Access Functions. */ /* Access Functions. */
...@@ -92,6 +108,9 @@ typedef struct _loop_vec_info { ...@@ -92,6 +108,9 @@ typedef struct _loop_vec_info {
#define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters)) #define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters))
#define LOOP_DO_PEELING_FOR_ALIGNMENT(L) (L)->do_peeling_for_alignment #define LOOP_DO_PEELING_FOR_ALIGNMENT(L) (L)->do_peeling_for_alignment
#define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr #define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr
#define LOOP_VINFO_LOC(L) (L)->loop_line_number
#define LOOP_LOC(L) LOOP_VINFO_LOC(L)
#define LOOP_VINFO_NITERS_KNOWN_P(L) \ #define LOOP_VINFO_NITERS_KNOWN_P(L) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment