Commit 595c2679 by Richard Biener Committed by Richard Biener

tree-vect-loop.c (vect_analyze_loop_form): Clarify reason for not vectorizing.

2013-01-03  Richard Biener  <rguenther@suse.de>

	* tree-vect-loop.c (vect_analyze_loop_form): Clarify reason
	for not vectorizing.
	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref): Do
	not build INDIRECT_REFs, call get_name once only.
	(vect_create_data_ref_ptr): Likewise.  Dump base object kind
	based on DR_BASE_OBJECT, not DR_BASE_ADDRESS.

From-SVN: r194853
parent f3d42000
2013-01-03 Richard Biener <rguenther@suse.de> 2013-01-03 Richard Biener <rguenther@suse.de>
* tree-vect-loop.c (vect_analyze_loop_form): Clarify reason
for not vectorizing.
* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref): Do
not build INDIRECT_REFs, call get_name once only.
(vect_create_data_ref_ptr): Likewise. Dump base object kind
based on DR_BASE_OBJECT, not DR_BASE_ADDRESS.
2013-01-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/55857 PR tree-optimization/55857
* tree-vect-stmts.c (vectorizable_load): Do not setup * tree-vect-stmts.c (vectorizable_load): Do not setup
re-alignment for invariant loads. re-alignment for invariant loads.
......
...@@ -3576,7 +3576,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -3576,7 +3576,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
stmt_vec_info stmt_info = vinfo_for_stmt (stmt); stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info); struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
tree data_ref_base = unshare_expr (DR_BASE_ADDRESS (dr)); tree data_ref_base = unshare_expr (DR_BASE_ADDRESS (dr));
tree base_name; const char *base_name;
tree data_ref_base_var; tree data_ref_base_var;
tree vec_stmt; tree vec_stmt;
tree addr_base, addr_expr; tree addr_base, addr_expr;
...@@ -3601,12 +3601,12 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -3601,12 +3601,12 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
} }
if (loop_vinfo) if (loop_vinfo)
base_name = build_fold_indirect_ref (data_ref_base); base_name = get_name (data_ref_base);
else else
{ {
base_offset = ssize_int (0); base_offset = ssize_int (0);
init = ssize_int (0); init = ssize_int (0);
base_name = build_fold_indirect_ref (unshare_expr (DR_REF (dr))); base_name = get_name (DR_REF (dr));
} }
data_ref_base_var = create_tmp_var (TREE_TYPE (data_ref_base), "batmp"); data_ref_base_var = create_tmp_var (TREE_TYPE (data_ref_base), "batmp");
...@@ -3654,7 +3654,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -3654,7 +3654,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
vec_stmt = fold_convert (vect_ptr_type, addr_base); vec_stmt = fold_convert (vect_ptr_type, addr_base);
addr_expr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, addr_expr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
get_name (base_name)); base_name);
vec_stmt = force_gimple_operand (vec_stmt, &seq, false, addr_expr); vec_stmt = force_gimple_operand (vec_stmt, &seq, false, addr_expr);
gimple_seq_add_seq (new_stmt_list, seq); gimple_seq_add_seq (new_stmt_list, seq);
...@@ -3729,7 +3729,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -3729,7 +3729,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
gimple_stmt_iterator *gsi, gimple *ptr_incr, gimple_stmt_iterator *gsi, gimple *ptr_incr,
bool only_init, bool *inv_p) bool only_init, bool *inv_p)
{ {
tree base_name; const char *base_name;
stmt_vec_info stmt_info = vinfo_for_stmt (stmt); stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
struct loop *loop = NULL; struct loop *loop = NULL;
...@@ -3786,23 +3786,22 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -3786,23 +3786,22 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
/* Create an expression for the first address accessed by this load /* Create an expression for the first address accessed by this load
in LOOP. */ in LOOP. */
base_name = build_fold_indirect_ref (unshare_expr (DR_BASE_ADDRESS (dr))); base_name = get_name (DR_BASE_ADDRESS (dr));
if (dump_enabled_p ()) if (dump_enabled_p ())
{ {
tree data_ref_base = base_name; tree dr_base_type = TREE_TYPE (DR_BASE_OBJECT (dr));
dump_printf_loc (MSG_NOTE, vect_location, dump_printf_loc (MSG_NOTE, vect_location,
"create %s-pointer variable to type: ", "create %s-pointer variable to type: ",
tree_code_name[(int) TREE_CODE (aggr_type)]); tree_code_name[(int) TREE_CODE (aggr_type)]);
dump_generic_expr (MSG_NOTE, TDF_SLIM, aggr_type); dump_generic_expr (MSG_NOTE, TDF_SLIM, aggr_type);
if (TREE_CODE (data_ref_base) == VAR_DECL if (TREE_CODE (dr_base_type) == ARRAY_TYPE)
|| TREE_CODE (data_ref_base) == ARRAY_REF)
dump_printf (MSG_NOTE, " vectorizing an array ref: "); dump_printf (MSG_NOTE, " vectorizing an array ref: ");
else if (TREE_CODE (data_ref_base) == COMPONENT_REF) else if (TREE_CODE (dr_base_type) == RECORD_TYPE)
dump_printf (MSG_NOTE, " vectorizing a record based array ref: "); dump_printf (MSG_NOTE, " vectorizing a record based array ref: ");
else if (TREE_CODE (data_ref_base) == SSA_NAME) else
dump_printf (MSG_NOTE, " vectorizing a pointer ref: "); dump_printf (MSG_NOTE, " vectorizing a pointer ref: ");
dump_generic_expr (MSG_NOTE, TDF_SLIM, base_name); dump_generic_expr (MSG_NOTE, TDF_SLIM, DR_BASE_OBJECT (dr));
} }
/* (1) Create the new aggregate-pointer variable. */ /* (1) Create the new aggregate-pointer variable. */
...@@ -3813,8 +3812,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -3813,8 +3812,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
aggr_ptr_type aggr_ptr_type
= build_qualified_type (aggr_ptr_type, = build_qualified_type (aggr_ptr_type,
TYPE_QUALS (TREE_TYPE (TREE_OPERAND (base, 0)))); TYPE_QUALS (TREE_TYPE (TREE_OPERAND (base, 0))));
aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var, aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var, base_name);
get_name (base_name));
/* Vector and array types inherit the alias set of their component /* Vector and array types inherit the alias set of their component
type by default so we need to use a ref-all pointer if the data type by default so we need to use a ref-all pointer if the data
...@@ -3827,7 +3825,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -3827,7 +3825,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
= build_pointer_type_for_mode (aggr_type, = build_pointer_type_for_mode (aggr_type,
TYPE_MODE (aggr_ptr_type), true); TYPE_MODE (aggr_ptr_type), true);
aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var, aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var,
get_name (base_name)); base_name);
} }
/* Likewise for any of the data references in the stmt group. */ /* Likewise for any of the data references in the stmt group. */
...@@ -3845,7 +3843,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -3845,7 +3843,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
TYPE_MODE (aggr_ptr_type), true); TYPE_MODE (aggr_ptr_type), true);
aggr_ptr aggr_ptr
= vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var, = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var,
get_name (base_name)); base_name);
break; break;
} }
......
...@@ -1171,7 +1171,7 @@ vect_analyze_loop_form (struct loop *loop) ...@@ -1171,7 +1171,7 @@ vect_analyze_loop_form (struct loop *loop)
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: unexpected loop form."); "not vectorized: latch block not empty.");
if (inner_loop_vinfo) if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true); destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL; return NULL;
......
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