2018-07-03 Richard Sandiford <richard.sandiford@arm.com>
+ * tree-vect-patterns.c (new_pattern_def_seq): Delete.
+ (vect_recog_dot_prod_pattern, vect_recog_sad_pattern)
+ (vect_recog_widen_op_pattern, vect_recog_over_widening_pattern)
+ (vect_recog_rotate_pattern, vect_synth_mult_by_constant): Don't set
+ STMT_VINFO_PATTERN_DEF_SEQ to null here.
+ (vect_recog_pow_pattern, vect_recog_vector_vector_shift_pattern)
+ (vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern): Use
+ append_pattern_def_seq instead of new_pattern_def_seq.
+ (vect_recog_divmod_pattern): Do both of the above.
+ (vect_pattern_recog_1): Assert that STMT_VINO_PATTERN_DEF_SEQ
+ is null.
+
+2018-07-03 Richard Sandiford <richard.sandiford@arm.com>
+
* tree-vect-patterns.c (vect_recog_dot_prod_pattern):
(vect_recog_sad_pattern, vect_recog_widen_op_pattern)
(vect_recog_widen_mult_pattern, vect_recog_pow_pattern):
new_stmt);
}
-static inline void
-new_pattern_def_seq (stmt_vec_info stmt_info, gimple *stmt)
-{
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_info) = NULL;
- append_pattern_def_seq (stmt_info, stmt);
-}
-
/* The caller wants to perform new operations on vect_external variable
VAR, so that the result of the operations would also be vect_external.
Return the edge on which the operations can be performed, if one exists.
return NULL;
/* Get the inputs in the appropriate types. */
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
tree mult_oprnd[2];
vect_convert_inputs (stmt_vinfo, 2, mult_oprnd, half_type,
unprom0, half_vectype);
return NULL;
/* Get the inputs to the SAD_EXPR in the appropriate types. */
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
tree sad_oprnd[2];
vect_convert_inputs (stmt_vinfo, 2, sad_oprnd, half_type,
unprom, half_vectype);
if (!*type_out)
return NULL;
- STMT_VINFO_PATTERN_DEF_SEQ (last_stmt_info) = NULL;
tree oprnd[2];
vect_convert_inputs (last_stmt_info, 2, oprnd, half_type, unprom, vectype);
return NULL;
tree def = vect_recog_temp_ssa_var (TREE_TYPE (base), NULL);
gimple *g = gimple_build_assign (def, MULT_EXPR, exp, logc);
- new_pattern_def_seq (stmt_vinfo, g);
+ append_pattern_def_seq (stmt_vinfo, g);
tree res = vect_recog_temp_ssa_var (TREE_TYPE (base), NULL);
g = gimple_build_call (exp_decl, 1, def);
gimple_call_set_lhs (g, res);
}
/* Calculate the rhs operands for an operation on NEW_TYPE. */
- STMT_VINFO_PATTERN_DEF_SEQ (last_stmt_info) = NULL;
tree ops[3] = {};
for (unsigned int i = 1; i < first_op; ++i)
ops[i - 1] = gimple_op (last_stmt, i);
def = rhs1;
}
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
if (def == NULL_TREE)
{
def = vect_recog_temp_ssa_var (type, NULL);
set_vinfo_for_stmt (def_stmt, new_stmt_info);
STMT_VINFO_VECTYPE (new_stmt_info)
= get_vectype_for_scalar_type (TREE_TYPE (rhs1));
- new_pattern_def_seq (stmt_vinfo, def_stmt);
+ append_pattern_def_seq (stmt_vinfo, def_stmt);
}
}
}
{
def = vect_recog_temp_ssa_var (TREE_TYPE (oprnd0), NULL);
def_stmt = gimple_build_assign (def, NOP_EXPR, oprnd1);
- new_pattern_def_seq (stmt_vinfo, def_stmt);
+ append_pattern_def_seq (stmt_vinfo, def_stmt);
}
/* Pattern detected. */
tree accumulator;
/* Clear out the sequence of statements so we can populate it below. */
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
gimple *stmt = NULL;
if (cast_to_unsigned_p)
fold_build2 (MINUS_EXPR, itype, oprnd1,
build_int_cst (itype, 1)),
build_int_cst (itype, 0));
- new_pattern_def_seq (stmt_vinfo, def_stmt);
+ append_pattern_def_seq (stmt_vinfo, def_stmt);
var = vect_recog_temp_ssa_var (itype, NULL);
def_stmt
= gimple_build_assign (var, PLUS_EXPR, oprnd0,
else
{
tree signmask;
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
if (compare_tree_int (oprnd1, 2) == 0)
{
signmask = vect_recog_temp_ssa_var (itype, NULL);
if (!can_mult_highpart_p (TYPE_MODE (vectype), TYPE_UNSIGNED (itype)))
return NULL;
- STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL;
-
if (TYPE_UNSIGNED (itype))
{
unsigned HOST_WIDE_INT mh, ml;
pattern_stmt = gimple_build_assign (vect_recog_temp_ssa_var (type, NULL),
NOP_EXPR, gimple_assign_lhs (def_stmt));
- new_pattern_def_seq (stmt_vinfo, def_stmt);
+ append_pattern_def_seq (stmt_vinfo, def_stmt);
def_stmt_info = new_stmt_vec_info (def_stmt, vinfo);
set_vinfo_for_stmt (def_stmt, def_stmt_info);
STMT_VINFO_VECTYPE (def_stmt_info) = vecitype;
new_stmt_info = new_stmt_vec_info (pattern_stmt, vinfo);
set_vinfo_for_stmt (pattern_stmt, new_stmt_info);
STMT_VINFO_VECTYPE (new_stmt_info) = new_vectype;
- new_pattern_def_seq (stmt_vinfo, pattern_stmt);
+ append_pattern_def_seq (stmt_vinfo, pattern_stmt);
lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL);
pattern_stmt = gimple_build_assign (lhs, CONVERT_EXPR, tmp);
return;
}
+ gcc_assert (!STMT_VINFO_PATTERN_DEF_SEQ (stmt_info));
pattern_stmt = recog_func->fn (stmt_info, &pattern_vectype);
if (!pattern_stmt)
{