From: Richard Sandiford Date: Tue, 31 Jul 2018 14:25:47 +0000 (+0000) Subject: [36/46] Add a pattern_stmt_p field to stmt_vec_info X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=634e7150449157267db1a1152370b11446acb6d0;p=gcc.git [36/46] Add a pattern_stmt_p field to stmt_vec_info This patch adds a pattern_stmt_p field to stmt_vec_info, so that it's possible to tell whether the statement is a pattern statement without referring to other statements. The new field goes in what was previously a hole in the structure, so the size is the same as before. 2018-07-31 Richard Sandiford gcc/ * tree-vectorizer.h (_stmt_vec_info::pattern_stmt_p): New field. (is_pattern_stmt_p): Use it. * tree-vect-patterns.c (vect_init_pattern_stmt): Set pattern_stmt_p on pattern statements. From-SVN: r263151 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ebe33a13607..22ddb54eee6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::pattern_stmt_p): New field. + (is_pattern_stmt_p): Use it. + * tree-vect-patterns.c (vect_init_pattern_stmt): Set pattern_stmt_p + on pattern statements. + 2018-07-31 Richard Sandiford * tree-vect-patterns.c (vect_mark_pattern_stmts): Take the diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 0f710e5b23c..18619d18c0f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -108,6 +108,7 @@ vect_init_pattern_stmt (gimple *pattern_stmt, stmt_vec_info orig_stmt_info, pattern_stmt_info = orig_stmt_info->vinfo->add_stmt (pattern_stmt); gimple_set_bb (pattern_stmt, gimple_bb (orig_stmt_info->stmt)); + pattern_stmt_info->pattern_stmt_p = true; STMT_VINFO_RELATED_STMT (pattern_stmt_info) = orig_stmt_info; STMT_VINFO_DEF_TYPE (pattern_stmt_info) = STMT_VINFO_DEF_TYPE (orig_stmt_info); diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 37f8b87e110..74ea6cf9b0d 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -791,6 +791,12 @@ struct _stmt_vec_info { /* Stmt is part of some pattern (computation idiom) */ bool in_pattern_p; + /* True if the statement was created during pattern recognition as + part of the replacement for RELATED_STMT. This implies that the + statement isn't part of any basic block, although for convenience + its gimple_bb is the same as for RELATED_STMT. */ + bool pattern_stmt_p; + /* Is this statement vectorizable or should it be skipped in (partial) vectorization. */ bool vectorizable; @@ -1157,8 +1163,7 @@ get_later_stmt (stmt_vec_info stmt1_info, stmt_vec_info stmt2_info) static inline bool is_pattern_stmt_p (stmt_vec_info stmt_info) { - stmt_vec_info related_stmt_info = STMT_VINFO_RELATED_STMT (stmt_info); - return related_stmt_info && STMT_VINFO_IN_PATTERN_P (related_stmt_info); + return stmt_info->pattern_stmt_p; } /* Return true if BB is a loop header. */