On Thu, Jul 26, 2018 at 12:29 PM Richard Sandiford <richard.sandif...@arm.com> wrote: > > Richard Biener <richard.guent...@gmail.com> writes: > > On Wed, Jul 25, 2018 at 1:09 PM Richard Sandiford > > <richard.sandif...@arm.com> wrote: > >> > >> Richard Biener <richard.guent...@gmail.com> writes: > >> > On Tue, Jul 24, 2018 at 12:07 PM Richard Sandiford > >> > <richard.sandif...@arm.com> wrote: > >> >> > >> >> 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. > >> > > >> > Not sure what the advantage is? is_pattern_stmt_p () looks nicer > >> > than ->is_pattern_p > >> > >> I can keep the function wrapper if you prefer that. But having a > >> statement "know" whether it's a pattern stmt makes things like > >> freeing stmt_vec_infos simpler (see later patches in the series). > > > > Ah, ok. > > > >> It should also be cheaper to test, but that's much more minor. > > > > So please keep the wrapper. > > Like this?
Yes, OK. Thanks, Richard. > > I guess at some point we should decide what to do with all > > the STMT_VINFO_ macros (and the others, {LOOP,BB}_ stuff > > is already used inconsistently). > > Yeah... > > > 2018-07-26 Richard Sandiford <richard.sandif...@arm.com> > > 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. > > Index: gcc/tree-vectorizer.h > =================================================================== > --- gcc/tree-vectorizer.h 2018-07-26 11:28:18.000000000 +0100 > +++ gcc/tree-vectorizer.h 2018-07-26 11:28:19.072951054 +0100 > @@ -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 > 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. */ > Index: gcc/tree-vect-patterns.c > =================================================================== > --- gcc/tree-vect-patterns.c 2018-07-26 11:28:18.000000000 +0100 > +++ gcc/tree-vect-patterns.c 2018-07-26 11:28:19.068951168 +0100 > @@ -108,6 +108,7 @@ vect_init_pattern_stmt (gimple *pattern_ > 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);