Commit 8644a673 by Ira Rosen Committed by Ira Rosen

tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Use…

tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Use REPORT_VECTORIZED_LOCATIONS instead REPORT_VECTORIZED_LOOPS.


	* tree-vect-loop-manip.c (vect_create_cond_for_alias_checks):
	Use REPORT_VECTORIZED_LOCATIONS instead 
	REPORT_VECTORIZED_LOOPS.
	* tree-vectorizer.c (vect_verbosity_level): Make static.
	(vect_loop_location): Rename to vect_location.
	(vect_set_verbosity_level): Update comment.
	(vect_set_dump_settings): Use REPORT_VECTORIZED_LOCATIONS
	and vect_location.
	(vectorize_loops): Fix comment. Use REPORT_VECTORIZED_LOCATIONS
	and vect_location. Use REPORT_UNVECTORIZED_LOCATIONS
	instead REPORT_UNVECTORIZED_LOOPS.
	* tree-vectorizer.h (enum vect_def_type): Rename vect_invariant_def and
	vect_loop_def to vect_external_def and vect_internal_def.
	(enum verbosity_levels): Rename REPORT_VECTORIZED_LOOPS
        and REPORT_UNVECTORIZED_LOOPS to 
	REPORT_VECTORIZED_LOCATIONS and 
	REPORT_UNVECTORIZED_LOCATIONS.
	(enum vect_relevant): Update comment. Rename vect_unused_in_loop
	and vect_used_in_loop and to vect_unused_in_scope and 
	vect_used_in_scope.
	(STMT_VINFO_RELEVANT_P): Use vect_unused_in_scope.
	(vect_verbosity_level): Remove declaration.
	(vect_analyze_operations): Likewise.
	(vect_analyze_stmt): Declare.
	* tree-vect-loop.c (vect_determine_vectorization_factor): Use
	REPORT_UNVECTORIZED_LOCATIONS.
	(vect_get_loop_niters): Fix indentation.
	(vect_analyze_loop_form): Use REPORT_UNVECTORIZED_LOCATIONS.
	(vect_analyze_loop_operations): New function.
	(vect_analyze_loop): Call vect_analyze_loop_operations instead of
	vect_analyze_operations.
	(vect_is_simple_reduction): Use new names.
	(vectorizable_live_operation, vect_transform_loop): Likewise.
	* tree-vect-data-refs.c (vect_check_interleaving): Add a return value to
	specify whether the data references can be a part of interleaving chain.
	(vect_analyze_data_ref_dependence): Use new names.
	(vect_analyze_data_refs_alignment, vect_analyze_data_refs): Likewise.
	(vect_create_addr_base_for_vector_ref): Remove redundant code.
	* tree-vect-patterns.c (widened_name_p): Use new names.
	(vect_recog_dot_prod_pattern): Likewise.
	* tree-vect-stmts.c (vect_stmt_relevant_p): Use new names.
	(process_use, vect_mark_stmts_to_be_vectorized, 
	vect_model_simple_cost, vect_model_store_cost,
	vect_get_vec_def_for_operand, vect_get_vec_def_for_stmt_copy,
	vectorizable_call, vectorizable_conversion, vectorizable_assignment,
	vectorizable_operation, vectorizable_type_demotion,
	vectorizable_type_promotion, vectorizable_store, vectorizable_load,
	vectorizable_condition): Likewise.
	(vect_analyze_operations): Split into vect_analyze_loop_operations
	and ...
	(vect_analyze_stmt): ... new function.
	(new_stmt_vec_info): Use new names.
	(vect_is_simple_use): Use new names and fix comment.
	* tree-vect-slp.c (vect_get_and_check_slp_defs): Use new names.
	(vect_build_slp_tree, vect_analyze_slp, vect_schedule_slp): Likewise.

From-SVN: r146875
parent b91322f2
2009-04-28 Ira Rosen <irar@il.ibm.com>
* tree-vect-loop-manip.c (vect_create_cond_for_alias_checks):
Use REPORT_VECTORIZED_LOCATIONS instead
REPORT_VECTORIZED_LOOPS.
* tree-vectorizer.c (vect_verbosity_level): Make static.
(vect_loop_location): Rename to vect_location.
(vect_set_verbosity_level): Update comment.
(vect_set_dump_settings): Use REPORT_VECTORIZED_LOCATIONS
and vect_location.
(vectorize_loops): Fix comment. Use REPORT_VECTORIZED_LOCATIONS
and vect_location. Use REPORT_UNVECTORIZED_LOCATIONS
instead REPORT_UNVECTORIZED_LOOPS.
* tree-vectorizer.h (enum vect_def_type): Rename vect_invariant_def and
vect_loop_def to vect_external_def and vect_internal_def.
(enum verbosity_levels): Rename REPORT_VECTORIZED_LOOPS
and REPORT_UNVECTORIZED_LOOPS to REPORT_VECTORIZED_LOCATIONS and
REPORT_UNVECTORIZED_LOCATIONS.
(enum vect_relevant): Update comment. Rename vect_unused_in_loop
and vect_used_in_loop and to vect_unused_in_scope and
vect_used_in_scope.
(STMT_VINFO_RELEVANT_P): Use vect_unused_in_scope.
(vect_verbosity_level): Remove declaration.
(vect_analyze_operations): Likewise.
(vect_analyze_stmt): Declare.
* tree-vect-loop.c (vect_determine_vectorization_factor): Use
REPORT_UNVECTORIZED_LOCATIONS.
(vect_get_loop_niters): Fix indentation.
(vect_analyze_loop_form): Use REPORT_UNVECTORIZED_LOCATIONS.
(vect_analyze_loop_operations): New function.
(vect_analyze_loop): Call vect_analyze_loop_operations instead of
vect_analyze_operations.
(vect_is_simple_reduction): Use new names.
(vectorizable_live_operation, vect_transform_loop): Likewise.
* tree-vect-data-refs.c (vect_check_interleaving): Add a return value to
specify whether the data references can be a part of interleaving chain.
(vect_analyze_data_ref_dependence): Use new names.
(vect_analyze_data_refs_alignment, vect_analyze_data_refs): Likewise.
(vect_create_addr_base_for_vector_ref): Remove redundant code.
* tree-vect-patterns.c (widened_name_p): Use new names.
(vect_recog_dot_prod_pattern): Likewise.
* tree-vect-stmts.c (vect_stmt_relevant_p): Use new names.
(process_use, vect_mark_stmts_to_be_vectorized,
vect_model_simple_cost, vect_model_store_cost,
vect_get_vec_def_for_operand, vect_get_vec_def_for_stmt_copy,
vectorizable_call, vectorizable_conversion, vectorizable_assignment,
vectorizable_operation, vectorizable_type_demotion,
vectorizable_type_promotion, vectorizable_store, vectorizable_load,
vectorizable_condition): Likewise.
(vect_analyze_operations): Split into vect_analyze_loop_operations
and ...
(vect_analyze_stmt): ... new function.
(new_stmt_vec_info): Use new names.
(vect_is_simple_use): Use new names and fix comment.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Use new names.
(vect_build_slp_tree, vect_analyze_slp, vect_schedule_slp): Likewise.
2009-04-28 Uros Bizjak <ubizjak@gmail.com> 2009-04-28 Uros Bizjak <ubizjak@gmail.com>
PR target/39911 PR target/39911
......
...@@ -321,7 +321,7 @@ vect_equal_offsets (tree offset1, tree offset2) ...@@ -321,7 +321,7 @@ vect_equal_offsets (tree offset1, tree offset2)
Check if DRA and DRB are a part of interleaving. In case they are, insert Check if DRA and DRB are a part of interleaving. In case they are, insert
DRA and DRB in an interleaving chain. */ DRA and DRB in an interleaving chain. */
static void static bool
vect_check_interleaving (struct data_reference *dra, vect_check_interleaving (struct data_reference *dra,
struct data_reference *drb) struct data_reference *drb)
{ {
...@@ -337,12 +337,13 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -337,12 +337,13 @@ vect_check_interleaving (struct data_reference *dra,
|| !vect_equal_offsets (DR_OFFSET (dra), DR_OFFSET (drb)) || !vect_equal_offsets (DR_OFFSET (dra), DR_OFFSET (drb))
|| !tree_int_cst_compare (DR_INIT (dra), DR_INIT (drb)) || !tree_int_cst_compare (DR_INIT (dra), DR_INIT (drb))
|| DR_IS_READ (dra) != DR_IS_READ (drb)) || DR_IS_READ (dra) != DR_IS_READ (drb))
return; return false;
/* Check: /* Check:
1. data-refs are of the same type 1. data-refs are of the same type
2. their steps are equal 2. their steps are equal
3. the step is greater than the difference between data-refs' inits */ 3. the step (if greater than zero) is greater than the difference between
data-refs' inits. */
type_size_a = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dra)))); type_size_a = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dra))));
type_size_b = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb)))); type_size_b = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb))));
...@@ -350,7 +351,7 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -350,7 +351,7 @@ vect_check_interleaving (struct data_reference *dra,
|| tree_int_cst_compare (DR_STEP (dra), DR_STEP (drb)) || tree_int_cst_compare (DR_STEP (dra), DR_STEP (drb))
|| !types_compatible_p (TREE_TYPE (DR_REF (dra)), || !types_compatible_p (TREE_TYPE (DR_REF (dra)),
TREE_TYPE (DR_REF (drb)))) TREE_TYPE (DR_REF (drb))))
return; return false;
init_a = TREE_INT_CST_LOW (DR_INIT (dra)); init_a = TREE_INT_CST_LOW (DR_INIT (dra));
init_b = TREE_INT_CST_LOW (DR_INIT (drb)); init_b = TREE_INT_CST_LOW (DR_INIT (drb));
...@@ -363,7 +364,7 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -363,7 +364,7 @@ vect_check_interleaving (struct data_reference *dra,
diff_mod_size = (init_a - init_b) % type_size_a; diff_mod_size = (init_a - init_b) % type_size_a;
if ((init_a - init_b) > step) if ((init_a - init_b) > step)
return; return false;
if (diff_mod_size == 0) if (diff_mod_size == 0)
{ {
...@@ -375,7 +376,7 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -375,7 +376,7 @@ vect_check_interleaving (struct data_reference *dra,
fprintf (vect_dump, " and "); fprintf (vect_dump, " and ");
print_generic_expr (vect_dump, DR_REF (drb), TDF_SLIM); print_generic_expr (vect_dump, DR_REF (drb), TDF_SLIM);
} }
return; return true;
} }
} }
else else
...@@ -385,7 +386,7 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -385,7 +386,7 @@ vect_check_interleaving (struct data_reference *dra,
diff_mod_size = (init_b - init_a) % type_size_a; diff_mod_size = (init_b - init_a) % type_size_a;
if ((init_b - init_a) > step) if ((init_b - init_a) > step)
return; return false;
if (diff_mod_size == 0) if (diff_mod_size == 0)
{ {
...@@ -397,9 +398,11 @@ vect_check_interleaving (struct data_reference *dra, ...@@ -397,9 +398,11 @@ vect_check_interleaving (struct data_reference *dra,
fprintf (vect_dump, " and "); fprintf (vect_dump, " and ");
print_generic_expr (vect_dump, DR_REF (drb), TDF_SLIM); print_generic_expr (vect_dump, DR_REF (drb), TDF_SLIM);
} }
return; return true;
} }
} }
return false;
} }
/* Check if data references pointed by DR_I and DR_J are same or /* Check if data references pointed by DR_I and DR_J are same or
...@@ -584,7 +587,7 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, ...@@ -584,7 +587,7 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
continue; continue;
} }
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
{ {
fprintf (vect_dump, fprintf (vect_dump,
"not vectorized, possible dependence " "not vectorized, possible dependence "
...@@ -868,7 +871,7 @@ vect_verify_datarefs_alignment (loop_vec_info loop_vinfo) ...@@ -868,7 +871,7 @@ vect_verify_datarefs_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_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
{ {
if (DR_IS_READ (dr)) if (DR_IS_READ (dr))
fprintf (vect_dump, fprintf (vect_dump,
...@@ -1347,14 +1350,14 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) ...@@ -1347,14 +1350,14 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
Return FALSE if a data reference is found that cannot be vectorized. */ Return FALSE if a data reference is found that cannot be vectorized. */
bool bool
vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo) vect_analyze_data_refs_alignment (loop_vec_info loop_vinfo)
{ {
if (vect_print_dump_info (REPORT_DETAILS)) if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "=== vect_analyze_data_refs_alignment ==="); fprintf (vect_dump, "=== vect_analyze_data_refs_alignment ===");
if (!vect_compute_data_refs_alignment (loop_vinfo)) if (!vect_compute_data_refs_alignment (loop_vinfo))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, fprintf (vect_dump,
"not vectorized: can't calculate alignment for data ref."); "not vectorized: can't calculate alignment for data ref.");
return false; return false;
...@@ -1663,7 +1666,7 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo) ...@@ -1663,7 +1666,7 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo)
for (i = 0; VEC_iterate (data_reference_p, datarefs, i, dr); i++) for (i = 0; VEC_iterate (data_reference_p, datarefs, i, dr); i++)
if (!vect_analyze_data_ref_access (dr)) if (!vect_analyze_data_ref_access (dr))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: complicated access pattern."); fprintf (vect_dump, "not vectorized: complicated access pattern.");
return false; return false;
} }
...@@ -1787,7 +1790,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1787,7 +1790,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (!dr || !DR_REF (dr)) if (!dr || !DR_REF (dr))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: unhandled data-ref "); fprintf (vect_dump, "not vectorized: unhandled data-ref ");
return false; return false;
} }
...@@ -1799,7 +1802,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1799,7 +1802,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (!DR_BASE_ADDRESS (dr) || !DR_OFFSET (dr) || !DR_INIT (dr) if (!DR_BASE_ADDRESS (dr) || !DR_OFFSET (dr) || !DR_INIT (dr)
|| !DR_STEP (dr)) || !DR_STEP (dr))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
{ {
fprintf (vect_dump, "not vectorized: data ref analysis failed "); fprintf (vect_dump, "not vectorized: data ref analysis failed ");
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM); print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
...@@ -1809,7 +1812,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1809,7 +1812,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (TREE_CODE (DR_BASE_ADDRESS (dr)) == INTEGER_CST) if (TREE_CODE (DR_BASE_ADDRESS (dr)) == INTEGER_CST)
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: base addr of dr is a " fprintf (vect_dump, "not vectorized: base addr of dr is a "
"constant"); "constant");
return false; return false;
...@@ -1930,7 +1933,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1930,7 +1933,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
if (STMT_VINFO_DATA_REF (stmt_info)) if (STMT_VINFO_DATA_REF (stmt_info))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
{ {
fprintf (vect_dump, fprintf (vect_dump,
"not vectorized: more than one data ref in stmt: "); "not vectorized: more than one data ref in stmt: ");
...@@ -1938,6 +1941,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1938,6 +1941,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
} }
return false; return false;
} }
STMT_VINFO_DATA_REF (stmt_info) = dr; STMT_VINFO_DATA_REF (stmt_info) = dr;
/* Set vectype for STMT. */ /* Set vectype for STMT. */
...@@ -1946,7 +1950,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) ...@@ -1946,7 +1950,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo)
get_vectype_for_scalar_type (scalar_type); get_vectype_for_scalar_type (scalar_type);
if (!STMT_VINFO_VECTYPE (stmt_info)) if (!STMT_VINFO_VECTYPE (stmt_info))
{ {
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
{ {
fprintf (vect_dump, fprintf (vect_dump,
"not vectorized: no vectype for stmt: "); "not vectorized: no vectype for stmt: ");
...@@ -2056,7 +2060,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -2056,7 +2060,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
gimple_seq seq = NULL; gimple_seq seq = NULL;
tree base_offset = unshare_expr (DR_OFFSET (dr)); tree base_offset = unshare_expr (DR_OFFSET (dr));
tree init = unshare_expr (DR_INIT (dr)); tree init = unshare_expr (DR_INIT (dr));
tree vect_ptr_type, addr_expr2; tree vect_ptr_type;
tree step = TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dr))); tree step = TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dr)));
gcc_assert (loop); gcc_assert (loop);
...@@ -2108,15 +2112,12 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -2108,15 +2112,12 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
vect_ptr_type = build_pointer_type (STMT_VINFO_VECTYPE (stmt_info)); vect_ptr_type = build_pointer_type (STMT_VINFO_VECTYPE (stmt_info));
/* addr_expr = 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)); get_name (base_name));
add_referenced_var (addr_expr); add_referenced_var (addr_expr);
vec_stmt = fold_convert (vect_ptr_type, addr_base); vec_stmt = force_gimple_operand (vec_stmt, &seq, false, addr_expr);
addr_expr2 = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
get_name (base_name));
add_referenced_var (addr_expr2);
vec_stmt = force_gimple_operand (vec_stmt, &seq, false, addr_expr2);
gimple_seq_add_seq (new_stmt_list, seq); gimple_seq_add_seq (new_stmt_list, seq);
if (vect_print_dump_info (REPORT_DETAILS)) if (vect_print_dump_info (REPORT_DETAILS))
...@@ -2124,6 +2125,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -2124,6 +2125,7 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
fprintf (vect_dump, "created "); fprintf (vect_dump, "created ");
print_generic_expr (vect_dump, vec_stmt, TDF_SLIM); print_generic_expr (vect_dump, vec_stmt, TDF_SLIM);
} }
return vec_stmt; return vec_stmt;
} }
......
...@@ -2290,7 +2290,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, ...@@ -2290,7 +2290,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo,
else else
*cond_expr = part_cond_expr; *cond_expr = part_cond_expr;
} }
if (vect_print_dump_info (REPORT_VECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_VECTORIZED_LOCATIONS))
fprintf (vect_dump, "created %u versioning for alias checks.\n", fprintf (vect_dump, "created %u versioning for alias checks.\n",
VEC_length (ddr_p, may_alias_ddrs)); VEC_length (ddr_p, may_alias_ddrs));
......
...@@ -81,8 +81,8 @@ widened_name_p (tree name, gimple use_stmt, tree *half_type, gimple *def_stmt) ...@@ -81,8 +81,8 @@ widened_name_p (tree name, gimple use_stmt, tree *half_type, gimple *def_stmt)
if (!vect_is_simple_use (name, loop_vinfo, def_stmt, &def, &dt)) if (!vect_is_simple_use (name, loop_vinfo, def_stmt, &def, &dt))
return false; return false;
if (dt != vect_loop_def if (dt != vect_internal_def
&& dt != vect_invariant_def && dt != vect_constant_def) && dt != vect_external_def && dt != vect_constant_def)
return false; return false;
if (! *def_stmt) if (! *def_stmt)
...@@ -259,7 +259,7 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out) ...@@ -259,7 +259,7 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out)
return NULL; return NULL;
stmt_vinfo = vinfo_for_stmt (stmt); stmt_vinfo = vinfo_for_stmt (stmt);
gcc_assert (stmt_vinfo); gcc_assert (stmt_vinfo);
if (STMT_VINFO_DEF_TYPE (stmt_vinfo) != vect_loop_def) if (STMT_VINFO_DEF_TYPE (stmt_vinfo) != vect_internal_def)
return NULL; return NULL;
if (gimple_assign_rhs_code (stmt) != MULT_EXPR) if (gimple_assign_rhs_code (stmt) != MULT_EXPR)
return NULL; return NULL;
...@@ -272,7 +272,7 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out) ...@@ -272,7 +272,7 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out)
return NULL; return NULL;
stmt_vinfo = vinfo_for_stmt (stmt); stmt_vinfo = vinfo_for_stmt (stmt);
gcc_assert (stmt_vinfo); gcc_assert (stmt_vinfo);
gcc_assert (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_loop_def); gcc_assert (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_internal_def);
oprnd00 = gimple_assign_rhs1 (stmt); oprnd00 = gimple_assign_rhs1 (stmt);
oprnd01 = gimple_assign_rhs2 (stmt); oprnd01 = gimple_assign_rhs2 (stmt);
} }
......
...@@ -239,10 +239,10 @@ vect_get_and_check_slp_defs (loop_vec_info loop_vinfo, slp_tree slp_node, ...@@ -239,10 +239,10 @@ vect_get_and_check_slp_defs (loop_vec_info loop_vinfo, slp_tree slp_node,
switch (dt[i]) switch (dt[i])
{ {
case vect_constant_def: case vect_constant_def:
case vect_invariant_def: case vect_external_def:
break; break;
case vect_loop_def: case vect_internal_def:
if (i == 0) if (i == 0)
VEC_safe_push (gimple, heap, *def_stmts0, def_stmt); VEC_safe_push (gimple, heap, *def_stmts0, def_stmt);
else else
...@@ -581,7 +581,7 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, slp_tree *node, ...@@ -581,7 +581,7 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, slp_tree *node,
} }
/* Create SLP_TREE nodes for the definition node/s. */ /* Create SLP_TREE nodes for the definition node/s. */
if (first_stmt_dt0 == vect_loop_def) if (first_stmt_dt0 == vect_internal_def)
{ {
slp_tree left_node = XNEW (struct _slp_tree); slp_tree left_node = XNEW (struct _slp_tree);
SLP_TREE_SCALAR_STMTS (left_node) = def_stmts0; SLP_TREE_SCALAR_STMTS (left_node) = def_stmts0;
...@@ -598,7 +598,7 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, slp_tree *node, ...@@ -598,7 +598,7 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, slp_tree *node,
SLP_TREE_LEFT (*node) = left_node; SLP_TREE_LEFT (*node) = left_node;
} }
if (first_stmt_dt1 == vect_loop_def) if (first_stmt_dt1 == vect_internal_def)
{ {
slp_tree right_node = XNEW (struct _slp_tree); slp_tree right_node = XNEW (struct _slp_tree);
SLP_TREE_SCALAR_STMTS (right_node) = def_stmts1; SLP_TREE_SCALAR_STMTS (right_node) = def_stmts1;
...@@ -952,7 +952,7 @@ vect_analyze_slp (loop_vec_info loop_vinfo) ...@@ -952,7 +952,7 @@ vect_analyze_slp (loop_vec_info loop_vinfo)
if (!vect_analyze_slp_instance (loop_vinfo, store)) if (!vect_analyze_slp_instance (loop_vinfo, store))
{ {
/* SLP failed. No instance can be SLPed in the loop. */ /* SLP failed. No instance can be SLPed in the loop. */
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "SLP failed."); fprintf (vect_dump, "SLP failed.");
return false; return false;
...@@ -1694,8 +1694,8 @@ vect_schedule_slp (loop_vec_info loop_vinfo) ...@@ -1694,8 +1694,8 @@ vect_schedule_slp (loop_vec_info loop_vinfo)
is_store = vect_schedule_slp_instance (SLP_INSTANCE_TREE (instance), is_store = vect_schedule_slp_instance (SLP_INSTANCE_TREE (instance),
instance, LOOP_VINFO_VECT_FACTOR (loop_vinfo)); instance, LOOP_VINFO_VECT_FACTOR (loop_vinfo));
if (vect_print_dump_info (REPORT_VECTORIZED_LOOPS) if (vect_print_dump_info (REPORT_VECTORIZED_LOCATIONS)
|| vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) || vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "vectorizing stmts using SLP."); fprintf (vect_dump, "vectorizing stmts using SLP.");
} }
......
...@@ -74,10 +74,10 @@ FILE *vect_dump; ...@@ -74,10 +74,10 @@ FILE *vect_dump;
/* vect_verbosity_level set to an invalid value /* vect_verbosity_level set to an invalid value
to mark that it's uninitialized. */ to mark that it's uninitialized. */
enum verbosity_levels vect_verbosity_level = MAX_VERBOSITY_LEVEL; static enum verbosity_levels vect_verbosity_level = MAX_VERBOSITY_LEVEL;
/* Loop location. */ /* Loop location. */
LOC vect_loop_location; LOC vect_location;
/* Bitmap of virtual variables to be renamed. */ /* Bitmap of virtual variables to be renamed. */
bitmap vect_memsyms_to_rename; bitmap vect_memsyms_to_rename;
...@@ -89,7 +89,7 @@ VEC(vec_void_p,heap) *stmt_vec_info_vec; ...@@ -89,7 +89,7 @@ VEC(vec_void_p,heap) *stmt_vec_info_vec;
/* Function vect_set_verbosity_level. /* Function vect_set_verbosity_level.
Called from toplev.c upon detection of the Called from opts.c upon detection of the
-ftree-vectorizer-verbose=N option. */ -ftree-vectorizer-verbose=N option. */
void void
...@@ -132,7 +132,7 @@ vect_set_dump_settings (void) ...@@ -132,7 +132,7 @@ vect_set_dump_settings (void)
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
vect_verbosity_level = REPORT_DETAILS; vect_verbosity_level = REPORT_DETAILS;
else if (dump_file && (dump_flags & TDF_STATS)) else if (dump_file && (dump_flags & TDF_STATS))
vect_verbosity_level = REPORT_UNVECTORIZED_LOOPS; vect_verbosity_level = REPORT_UNVECTORIZED_LOCATIONS;
else else
vect_verbosity_level = REPORT_NONE; vect_verbosity_level = REPORT_NONE;
...@@ -153,13 +153,13 @@ vect_print_dump_info (enum verbosity_levels vl) ...@@ -153,13 +153,13 @@ vect_print_dump_info (enum verbosity_levels vl)
if (!current_function_decl || !vect_dump) if (!current_function_decl || !vect_dump)
return false; return false;
if (vect_loop_location == UNKNOWN_LOC) if (vect_location == UNKNOWN_LOC)
fprintf (vect_dump, "\n%s:%d: note: ", fprintf (vect_dump, "\n%s:%d: note: ",
DECL_SOURCE_FILE (current_function_decl), DECL_SOURCE_FILE (current_function_decl),
DECL_SOURCE_LINE (current_function_decl)); DECL_SOURCE_LINE (current_function_decl));
else else
fprintf (vect_dump, "\n%s:%d: note: ", fprintf (vect_dump, "\n%s:%d: note: ",
LOC_FILE (vect_loop_location), LOC_LINE (vect_loop_location)); LOC_FILE (vect_location), LOC_LINE (vect_location));
return true; return true;
} }
...@@ -167,7 +167,7 @@ vect_print_dump_info (enum verbosity_levels vl) ...@@ -167,7 +167,7 @@ vect_print_dump_info (enum verbosity_levels vl)
/* Function vectorize_loops. /* Function vectorize_loops.
Entry Point to loop vectorization phase. */ Entry point to loop vectorization phase. */
unsigned unsigned
vectorize_loops (void) vectorize_loops (void)
...@@ -187,7 +187,7 @@ vectorize_loops (void) ...@@ -187,7 +187,7 @@ vectorize_loops (void)
/* Fix the verbosity level if not defined explicitly by the user. */ /* Fix the verbosity level if not defined explicitly by the user. */
vect_set_dump_settings (); vect_set_dump_settings ();
/* Allocate the bitmap that records which virtual variables that /* Allocate the bitmap that records which virtual variables
need to be renamed. */ need to be renamed. */
vect_memsyms_to_rename = BITMAP_ALLOC (NULL); vect_memsyms_to_rename = BITMAP_ALLOC (NULL);
...@@ -203,7 +203,7 @@ vectorize_loops (void) ...@@ -203,7 +203,7 @@ vectorize_loops (void)
{ {
loop_vec_info loop_vinfo; loop_vec_info loop_vinfo;
vect_loop_location = find_loop_location (loop); vect_location = find_loop_location (loop);
loop_vinfo = vect_analyze_loop (loop); loop_vinfo = vect_analyze_loop (loop);
loop->aux = loop_vinfo; loop->aux = loop_vinfo;
...@@ -213,11 +213,12 @@ vectorize_loops (void) ...@@ -213,11 +213,12 @@ vectorize_loops (void)
vect_transform_loop (loop_vinfo); vect_transform_loop (loop_vinfo);
num_vectorized_loops++; num_vectorized_loops++;
} }
vect_loop_location = UNKNOWN_LOC;
vect_location = UNKNOWN_LOC;
statistics_counter_event (cfun, "Vectorized loops", num_vectorized_loops); statistics_counter_event (cfun, "Vectorized loops", num_vectorized_loops);
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS) if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS)
|| (vect_print_dump_info (REPORT_VECTORIZED_LOOPS) || (vect_print_dump_info (REPORT_VECTORIZED_LOCATIONS)
&& num_vectorized_loops > 0)) && num_vectorized_loops > 0))
fprintf (vect_dump, "vectorized %u loops in function.\n", fprintf (vect_dump, "vectorized %u loops in function.\n",
num_vectorized_loops); num_vectorized_loops);
......
...@@ -56,9 +56,9 @@ enum dr_alignment_support { ...@@ -56,9 +56,9 @@ enum dr_alignment_support {
/* Define type of def-use cross-iteration cycle. */ /* Define type of def-use cross-iteration cycle. */
enum vect_def_type { enum vect_def_type {
vect_uninitialized_def = 0, vect_uninitialized_def = 0,
vect_constant_def, vect_constant_def = 1,
vect_invariant_def, vect_external_def,
vect_loop_def, vect_internal_def,
vect_induction_def, vect_induction_def,
vect_reduction_def, vect_reduction_def,
vect_unknown_def_type vect_unknown_def_type
...@@ -67,8 +67,8 @@ enum vect_def_type { ...@@ -67,8 +67,8 @@ enum vect_def_type {
/* Define verbosity levels. */ /* Define verbosity levels. */
enum verbosity_levels { enum verbosity_levels {
REPORT_NONE, REPORT_NONE,
REPORT_VECTORIZED_LOOPS, REPORT_VECTORIZED_LOCATIONS,
REPORT_UNVECTORIZED_LOOPS, REPORT_UNVECTORIZED_LOCATIONS,
REPORT_COST, REPORT_COST,
REPORT_ALIGNMENT, REPORT_ALIGNMENT,
REPORT_DR_DETAILS, REPORT_DR_DETAILS,
...@@ -300,9 +300,10 @@ enum stmt_vec_info_type { ...@@ -300,9 +300,10 @@ enum stmt_vec_info_type {
loop_exit_ctrl_vec_info_type loop_exit_ctrl_vec_info_type
}; };
/* Indicates whether/how a variable is used in the loop. */ /* Indicates whether/how a variable is used in the scope of loop/basic
block. */
enum vect_relevant { enum vect_relevant {
vect_unused_in_loop = 0, vect_unused_in_scope = 0,
vect_used_in_outer_by_reduction, vect_used_in_outer_by_reduction,
vect_used_in_outer, vect_used_in_outer,
...@@ -314,7 +315,7 @@ enum vect_relevant { ...@@ -314,7 +315,7 @@ enum vect_relevant {
computed. */ computed. */
vect_used_by_reduction, vect_used_by_reduction,
vect_used_in_loop vect_used_in_scope
}; };
/* The type of vectorization that can be applied to the stmt: regular loop-based /* The type of vectorization that can be applied to the stmt: regular loop-based
...@@ -475,7 +476,7 @@ typedef struct _stmt_vec_info { ...@@ -475,7 +476,7 @@ typedef struct _stmt_vec_info {
#define DR_GROUP_SAME_DR_STMT(S) (S)->same_dr_stmt #define DR_GROUP_SAME_DR_STMT(S) (S)->same_dr_stmt
#define DR_GROUP_READ_WRITE_DEPENDENCE(S) (S)->read_write_dep #define DR_GROUP_READ_WRITE_DEPENDENCE(S) (S)->read_write_dep
#define STMT_VINFO_RELEVANT_P(S) ((S)->relevant != vect_unused_in_loop) #define STMT_VINFO_RELEVANT_P(S) ((S)->relevant != vect_unused_in_scope)
#define STMT_VINFO_OUTSIDE_OF_LOOP_COST(S) (S)->cost.outside_of_loop #define STMT_VINFO_OUTSIDE_OF_LOOP_COST(S) (S)->cost.outside_of_loop
#define STMT_VINFO_INSIDE_OF_LOOP_COST(S) (S)->cost.inside_of_loop #define STMT_VINFO_INSIDE_OF_LOOP_COST(S) (S)->cost.inside_of_loop
...@@ -693,12 +694,9 @@ known_alignment_for_access_p (struct data_reference *data_ref_info) ...@@ -693,12 +694,9 @@ known_alignment_for_access_p (struct data_reference *data_ref_info)
extern FILE *vect_dump; extern FILE *vect_dump;
extern LOC vect_loop_location; extern LOC vect_loop_location;
extern enum verbosity_levels vect_verbosity_level;
/* Bitmap of virtual variables to be renamed. */ /* Bitmap of virtual variables to be renamed. */
extern bitmap vect_memsyms_to_rename; extern bitmap vect_memsyms_to_rename;
/*-----------------------------------------------------------------*/ /*-----------------------------------------------------------------*/
/* Function prototypes. */ /* Function prototypes. */
/*-----------------------------------------------------------------*/ /*-----------------------------------------------------------------*/
...@@ -744,7 +742,7 @@ extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree); ...@@ -744,7 +742,7 @@ extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree);
extern bool vect_transform_stmt (gimple, gimple_stmt_iterator *, extern bool vect_transform_stmt (gimple, gimple_stmt_iterator *,
bool *, slp_tree, slp_instance); bool *, slp_tree, slp_instance);
extern void vect_remove_stores (gimple); extern void vect_remove_stores (gimple);
extern bool vect_analyze_operations (loop_vec_info); extern bool vect_analyze_stmt (gimple, bool *);
/* In tree-vect-data-refs.c. */ /* In tree-vect-data-refs.c. */
extern bool vect_can_force_dr_alignment_p (const_tree, unsigned int); extern bool vect_can_force_dr_alignment_p (const_tree, unsigned int);
......
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