Commit f95b7597 by Richard Biener Committed by Richard Biener

tree-vectorizer.h (_stmt_vec_info): Remove same_dr_stmt member.

2019-04-10  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_stmt_vec_info): Remove same_dr_stmt
	member.
	(DR_GROUP_SAME_DR_STMT): Remove.
	* tree-vect-stmts.c (vectorizable_load): Remove unreachable code.
	* tree-vect-data-refs.c (vect_analyze_group_access_1): Likewise,
	replace with assert.
	(vect_analyze_data_ref_accesses): Fix INTEGER_CST comparison.
	(vect_record_grouped_load_vectors): Remove unreachable code.

From-SVN: r270250
parent 4a3f7992
2019-04-10 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (_stmt_vec_info): Remove same_dr_stmt
member.
(DR_GROUP_SAME_DR_STMT): Remove.
* tree-vect-stmts.c (vectorizable_load): Remove unreachable code.
* tree-vect-data-refs.c (vect_analyze_group_access_1): Likewise,
replace with assert.
(vect_analyze_data_ref_accesses): Fix INTEGER_CST comparison.
(vect_record_grouped_load_vectors): Remove unreachable code.
2019-04-10 Richard Earnshaw <rearnsha@arm.com>
PR target/90016
......
......@@ -2523,40 +2523,15 @@ vect_analyze_group_access_1 (dr_vec_info *dr_info)
struct data_reference *data_ref = dr;
unsigned int count = 1;
tree prev_init = DR_INIT (data_ref);
stmt_vec_info prev = stmt_info;
HOST_WIDE_INT diff, gaps = 0;
/* By construction, all group members have INTEGER_CST DR_INITs. */
while (next)
{
/* Skip same data-refs. In case that two or more stmts share
data-ref (supported only for loads), we vectorize only the first
stmt, and the rest get their vectorized loads from the first
one. */
if (!tree_int_cst_compare (DR_INIT (data_ref),
DR_INIT (STMT_VINFO_DATA_REF (next))))
{
if (DR_IS_WRITE (data_ref))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"Two store stmts share the same dr.\n");
return false;
}
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"Two or more load stmts share the same dr.\n");
/* For load use the same data-ref load. */
DR_GROUP_SAME_DR_STMT (next) = prev;
/* We never have the same DR multiple times. */
gcc_assert (tree_int_cst_compare (DR_INIT (data_ref),
DR_INIT (STMT_VINFO_DATA_REF (next))) != 0);
prev = next;
next = DR_GROUP_NEXT_ELEMENT (next);
continue;
}
prev = next;
data_ref = STMT_VINFO_DATA_REF (next);
/* All group members have the same STEP by construction. */
......@@ -3072,8 +3047,8 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
stmt_vec_info next, g = grp;
while ((next = DR_GROUP_NEXT_ELEMENT (g)))
{
if ((DR_INIT (STMT_VINFO_DR_INFO (next)->dr)
== DR_INIT (STMT_VINFO_DR_INFO (g)->dr))
if (tree_int_cst_equal (DR_INIT (STMT_VINFO_DR_INFO (next)->dr),
DR_INIT (STMT_VINFO_DR_INFO (g)->dr))
&& gimple_uid (STMT_VINFO_STMT (next)) < first_duplicate)
first_duplicate = gimple_uid (STMT_VINFO_STMT (next));
g = next;
......@@ -6334,7 +6309,9 @@ vect_record_grouped_load_vectors (stmt_vec_info stmt_info,
continue;
}
while (next_stmt_info)
/* ??? The following needs cleanup after the removal of
DR_GROUP_SAME_DR_STMT. */
if (next_stmt_info)
{
stmt_vec_info new_stmt_info = vinfo->lookup_def (tmp_data_ref);
/* We assume that if VEC_STMT is not NULL, this is a case of multiple
......@@ -6344,8 +6321,6 @@ vect_record_grouped_load_vectors (stmt_vec_info stmt_info,
STMT_VINFO_VEC_STMT (next_stmt_info) = new_stmt_info;
else
{
if (!DR_GROUP_SAME_DR_STMT (next_stmt_info))
{
stmt_vec_info prev_stmt_info
= STMT_VINFO_VEC_STMT (next_stmt_info);
stmt_vec_info rel_stmt_info
......@@ -6358,15 +6333,9 @@ vect_record_grouped_load_vectors (stmt_vec_info stmt_info,
STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt_info;
}
}
next_stmt_info = DR_GROUP_NEXT_ELEMENT (next_stmt_info);
gap_count = 1;
/* If NEXT_STMT_INFO accesses the same DR as the previous statement,
put the same TMP_DATA_REF as its vectorized statement; otherwise
get the next data-ref from RESULT_CHAIN. */
if (!next_stmt_info || !DR_GROUP_SAME_DR_STMT (next_stmt_info))
break;
}
}
}
......
......@@ -7704,19 +7704,6 @@ vectorizable_load (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
"group loads with negative dependence distance\n");
return false;
}
/* Similarly when the stmt is a load that is both part of a SLP
instance and a loop vectorized stmt via the same-dr mechanism
we have to give up. */
if (DR_GROUP_SAME_DR_STMT (stmt_info)
&& (STMT_SLP_TYPE (stmt_info)
!= STMT_SLP_TYPE (DR_GROUP_SAME_DR_STMT (stmt_info))))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"conflicting SLP types for CSEd load\n");
return false;
}
}
else
group_size = 1;
......
......@@ -872,9 +872,6 @@ struct _stmt_vec_info {
stmt_vec_info first_element;
/* Pointer to the next element in the group. */
stmt_vec_info next_element;
/* For data-refs, in case that two or more stmts share data-ref, this is the
pointer to the previously detected stmt with the same dr. */
stmt_vec_info same_dr_stmt;
/* The size of the group. */
unsigned int size;
/* For stores, number of stores from this group seen. We vectorize the last
......@@ -1044,8 +1041,6 @@ STMT_VINFO_BB_VINFO (stmt_vec_info stmt_vinfo)
(gcc_checking_assert ((S)->dr_aux.dr), (S)->store_count)
#define DR_GROUP_GAP(S) \
(gcc_checking_assert ((S)->dr_aux.dr), (S)->gap)
#define DR_GROUP_SAME_DR_STMT(S) \
(gcc_checking_assert ((S)->dr_aux.dr), (S)->same_dr_stmt)
#define REDUC_GROUP_FIRST_ELEMENT(S) \
(gcc_checking_assert (!(S)->dr_aux.dr), (S)->first_element)
......
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