[2/n] PR85694: Attach a DEF_SEQ only to the original statement
Richard Biener
richard.guenther@gmail.com
Tue Jun 19 10:14:00 GMT 2018
On Mon, Jun 18, 2018 at 4:53 PM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>
> A pattern's PATTERN_DEF_SEQ was attached to both the original statement
> and the main pattern statement, which made it harder to update later.
> This patch attaches it to just the original statement. In practice,
> anything that cared had ready access to both.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
OK but can you please add a sentence to the pattern_def_seq member
comment to say it's present only on the in_pattern_p stmt?
Thanks,
Richard.
> Richard
>
>
> 2018-06-18 Richard Sandiford <richard.sandiford@arm.com>
>
> gcc/
> * tree-vect-loop.c (vect_determine_vf_for_stmt): Take the
> PATTERN_DEF_SEQ from the original statement rather than
> the main pattern statement.
> * tree-vect-stmts.c (free_stmt_vec_info): Likewise.
> * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Likewise.
> (vect_mark_pattern_stmts): Don't copy the PATTERN_DEF_SEQ.
>
> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c 2018-06-18 15:24:10.457472575 +0100
> +++ gcc/tree-vect-loop.c 2018-06-18 15:24:21.001379616 +0100
> @@ -224,10 +224,10 @@ vect_determine_vf_for_stmt (stmt_vec_inf
> if (STMT_VINFO_IN_PATTERN_P (stmt_info)
> && STMT_VINFO_RELATED_STMT (stmt_info))
> {
> + gimple *pattern_def_seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info);
> stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
>
> /* If a pattern statement has def stmts, analyze them too. */
> - gimple *pattern_def_seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info);
> for (gimple_stmt_iterator si = gsi_start (pattern_def_seq);
> !gsi_end_p (si); gsi_next (&si))
> {
> @@ -2259,10 +2259,10 @@ vect_analyze_loop_2 (loop_vec_info loop_
> STMT_SLP_TYPE (stmt_info) = loop_vect;
> if (STMT_VINFO_IN_PATTERN_P (stmt_info))
> {
> + gimple *pattern_def_seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info);
> stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
> STMT_SLP_TYPE (stmt_info) = loop_vect;
> - for (gimple_stmt_iterator pi
> - = gsi_start (STMT_VINFO_PATTERN_DEF_SEQ (stmt_info));
> + for (gimple_stmt_iterator pi = gsi_start (pattern_def_seq);
> !gsi_end_p (pi); gsi_next (&pi))
> {
> gimple *pstmt = gsi_stmt (pi);
> Index: gcc/tree-vect-stmts.c
> ===================================================================
> --- gcc/tree-vect-stmts.c 2018-06-18 15:24:10.461472540 +0100
> +++ gcc/tree-vect-stmts.c 2018-06-18 15:24:21.005379580 +0100
> @@ -9892,29 +9892,26 @@ free_stmt_vec_info (gimple *stmt)
> too. */
> if (STMT_VINFO_IN_PATTERN_P (stmt_info))
> {
> + if (gimple_seq seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info))
> + for (gimple_stmt_iterator si = gsi_start (seq);
> + !gsi_end_p (si); gsi_next (&si))
> + {
> + gimple *seq_stmt = gsi_stmt (si);
> + gimple_set_bb (seq_stmt, NULL);
> + tree lhs = gimple_get_lhs (seq_stmt);
> + if (lhs && TREE_CODE (lhs) == SSA_NAME)
> + release_ssa_name (lhs);
> + free_stmt_vec_info (seq_stmt);
> + }
> stmt_vec_info patt_info
> = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
> if (patt_info)
> {
> - gimple_seq seq = STMT_VINFO_PATTERN_DEF_SEQ (patt_info);
> gimple *patt_stmt = STMT_VINFO_STMT (patt_info);
> gimple_set_bb (patt_stmt, NULL);
> tree lhs = gimple_get_lhs (patt_stmt);
> if (lhs && TREE_CODE (lhs) == SSA_NAME)
> release_ssa_name (lhs);
> - if (seq)
> - {
> - gimple_stmt_iterator si;
> - for (si = gsi_start (seq); !gsi_end_p (si); gsi_next (&si))
> - {
> - gimple *seq_stmt = gsi_stmt (si);
> - gimple_set_bb (seq_stmt, NULL);
> - lhs = gimple_get_lhs (seq_stmt);
> - if (lhs && TREE_CODE (lhs) == SSA_NAME)
> - release_ssa_name (lhs);
> - free_stmt_vec_info (seq_stmt);
> - }
> - }
> free_stmt_vec_info (patt_stmt);
> }
> }
> Index: gcc/tree-vect-patterns.c
> ===================================================================
> --- gcc/tree-vect-patterns.c 2018-06-18 15:22:36.898297310 +0100
> +++ gcc/tree-vect-patterns.c 2018-06-18 15:24:21.001379616 +0100
> @@ -405,13 +405,13 @@ vect_recog_dot_prod_pattern (vec<gimple
> stmt = STMT_VINFO_RELATED_STMT (stmt_vinfo);
> if (gimple_assign_rhs_code (stmt) != WIDEN_MULT_EXPR)
> return NULL;
> + STMT_VINFO_PATTERN_DEF_SEQ (vinfo_for_stmt (last_stmt))
> + = STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo);
> stmt_vinfo = vinfo_for_stmt (stmt);
> gcc_assert (stmt_vinfo);
> gcc_assert (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_internal_def);
> oprnd00 = gimple_assign_rhs1 (stmt);
> oprnd01 = gimple_assign_rhs2 (stmt);
> - STMT_VINFO_PATTERN_DEF_SEQ (vinfo_for_stmt (last_stmt))
> - = STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo);
> }
> else
> {
> @@ -4433,28 +4433,23 @@ vect_mark_pattern_stmts (gimple *orig_st
> STMT_VINFO_VECTYPE (pattern_stmt_info) = pattern_vectype;
> STMT_VINFO_IN_PATTERN_P (orig_stmt_info) = true;
> STMT_VINFO_RELATED_STMT (orig_stmt_info) = pattern_stmt;
> - STMT_VINFO_PATTERN_DEF_SEQ (pattern_stmt_info)
> - = STMT_VINFO_PATTERN_DEF_SEQ (orig_stmt_info);
> - if (STMT_VINFO_PATTERN_DEF_SEQ (pattern_stmt_info))
> - {
> - gimple_stmt_iterator si;
> - for (si = gsi_start (STMT_VINFO_PATTERN_DEF_SEQ (pattern_stmt_info));
> - !gsi_end_p (si); gsi_next (&si))
> - {
> - def_stmt = gsi_stmt (si);
> - def_stmt_info = vinfo_for_stmt (def_stmt);
> - if (def_stmt_info == NULL)
> - {
> - def_stmt_info = new_stmt_vec_info (def_stmt, vinfo);
> - set_vinfo_for_stmt (def_stmt, def_stmt_info);
> - }
> - gimple_set_bb (def_stmt, gimple_bb (orig_stmt));
> - STMT_VINFO_RELATED_STMT (def_stmt_info) = orig_stmt;
> - STMT_VINFO_DEF_TYPE (def_stmt_info) = vect_internal_def;
> - if (STMT_VINFO_VECTYPE (def_stmt_info) == NULL_TREE)
> - STMT_VINFO_VECTYPE (def_stmt_info) = pattern_vectype;
> - }
> - }
> + if (gimple *def_seq = STMT_VINFO_PATTERN_DEF_SEQ (orig_stmt_info))
> + for (gimple_stmt_iterator si = gsi_start (def_seq);
> + !gsi_end_p (si); gsi_next (&si))
> + {
> + def_stmt = gsi_stmt (si);
> + def_stmt_info = vinfo_for_stmt (def_stmt);
> + if (def_stmt_info == NULL)
> + {
> + def_stmt_info = new_stmt_vec_info (def_stmt, vinfo);
> + set_vinfo_for_stmt (def_stmt, def_stmt_info);
> + }
> + gimple_set_bb (def_stmt, gimple_bb (orig_stmt));
> + STMT_VINFO_RELATED_STMT (def_stmt_info) = orig_stmt;
> + STMT_VINFO_DEF_TYPE (def_stmt_info) = vect_internal_def;
> + if (STMT_VINFO_VECTYPE (def_stmt_info) == NULL_TREE)
> + STMT_VINFO_VECTYPE (def_stmt_info) = pattern_vectype;
> + }
> }
>
> /* Function vect_pattern_recog_1
More information about the Gcc-patches
mailing list