2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
+ * 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 <richard.sandiford@arm.com>
+
* tree-vect-patterns.c (vect_mark_pattern_stmts): Take the
original stmt as a stmt_vec_info rather than a gimple stmt.
(vect_pattern_recog_1): Take the statement directly as a
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);
/* 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;
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. */