Commit 32e8e429 by Richard Sandiford Committed by Richard Sandiford

[32/46] Use stmt_vec_info in function interfaces (part 2)

This second part handles the mechanical change from a gimple stmt
argument to a stmt_vec_info argument.  It updates the function
comments if they referred to the argument by name, but it doesn't
try to retrofit mentions to other functions.

2018-07-31  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vectorizer.h (nested_in_vect_loop_p): Move further down
	file and take a stmt_vec_info instead of a gimple stmt.
	(supportable_widening_operation, vect_finish_replace_stmt)
	(vect_finish_stmt_generation, vect_get_store_rhs)
	(vect_get_vec_def_for_operand_1, vect_get_vec_def_for_operand)
	(vect_get_vec_defs, vect_init_vector, vect_transform_stmt)
	(vect_remove_stores, vect_analyze_stmt, vectorizable_condition)
	(vect_get_smallest_scalar_type, vect_check_gather_scatter)
	(vect_create_data_ref_ptr, bump_vector_ptr)
	(vect_permute_store_chain, vect_setup_realignment)
	(vect_transform_grouped_load, vect_record_grouped_load_vectors)
	(vect_create_addr_base_for_vector_ref, vectorizable_live_operation)
	(vectorizable_reduction, vectorizable_induction)
	(get_initial_def_for_reduction, is_simple_and_all_uses_invariant)
	(vect_get_place_in_interleaving_chain): Take stmt_vec_infos rather
	than gimple stmts as arguments.
	* tree-vect-data-refs.c (vect_get_smallest_scalar_type)
	(vect_preserves_scalar_order_p, vect_slp_analyze_node_dependences)
	(can_group_stmts_p, vect_check_gather_scatter)
	(vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr)
	(bump_vector_ptr, vect_permute_store_chain, vect_setup_realignment)
	(vect_permute_load_chain, vect_shift_permute_load_chain)
	(vect_transform_grouped_load)
	(vect_record_grouped_load_vectors): Likewise.
	* tree-vect-loop.c (vect_fixup_reduc_chain)
	(get_initial_def_for_reduction, vect_create_epilog_for_reduction)
	(vectorize_fold_left_reduction, is_nonwrapping_integer_induction)
	(vectorizable_reduction, vectorizable_induction)
	(vectorizable_live_operation, vect_loop_kill_debug_uses): Likewise.
	* tree-vect-patterns.c (type_conversion_p, adjust_bool_stmts)
	(vect_get_load_store_mask): Likewise.
	* tree-vect-slp.c (vect_get_place_in_interleaving_chain)
	(vect_analyze_slp_instance, vect_mask_constant_operand_p): Likewise.
	* tree-vect-stmts.c (vect_mark_relevant)
	(is_simple_and_all_uses_invariant)
	(exist_non_indexing_operands_for_use_p, process_use)
	(vect_init_vector_1, vect_init_vector, vect_get_vec_def_for_operand_1)
	(vect_get_vec_def_for_operand, vect_get_vec_defs)
	(vect_finish_stmt_generation_1, vect_finish_replace_stmt)
	(vect_finish_stmt_generation, vect_truncate_gather_scatter_offset)
	(compare_step_with_zero, vect_get_store_rhs, get_group_load_store_type)
	(get_negative_load_store_type, get_load_store_type)
	(vect_check_load_store_mask, vect_check_store_rhs)
	(vect_build_gather_load_calls, vect_get_strided_load_store_ops)
	(vectorizable_bswap, vectorizable_call, vectorizable_simd_clone_call)
	(vect_create_vectorized_demotion_stmts, vectorizable_conversion)
	(vectorizable_assignment, vectorizable_shift, vectorizable_operation)
	(get_group_alias_ptr_type, vectorizable_store, hoist_defs_of_uses)
	(vectorizable_load, vectorizable_condition, vectorizable_comparison)
	(vect_analyze_stmt, vect_transform_stmt, vect_remove_stores)
	(supportable_widening_operation): Likewise.

From-SVN: r263147
parent 82570274
2018-07-31 Richard Sandiford <richard.sandiford@arm.com> 2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
* tree-vectorizer.h (nested_in_vect_loop_p): Move further down
file and take a stmt_vec_info instead of a gimple stmt.
(supportable_widening_operation, vect_finish_replace_stmt)
(vect_finish_stmt_generation, vect_get_store_rhs)
(vect_get_vec_def_for_operand_1, vect_get_vec_def_for_operand)
(vect_get_vec_defs, vect_init_vector, vect_transform_stmt)
(vect_remove_stores, vect_analyze_stmt, vectorizable_condition)
(vect_get_smallest_scalar_type, vect_check_gather_scatter)
(vect_create_data_ref_ptr, bump_vector_ptr)
(vect_permute_store_chain, vect_setup_realignment)
(vect_transform_grouped_load, vect_record_grouped_load_vectors)
(vect_create_addr_base_for_vector_ref, vectorizable_live_operation)
(vectorizable_reduction, vectorizable_induction)
(get_initial_def_for_reduction, is_simple_and_all_uses_invariant)
(vect_get_place_in_interleaving_chain): Take stmt_vec_infos rather
than gimple stmts as arguments.
* tree-vect-data-refs.c (vect_get_smallest_scalar_type)
(vect_preserves_scalar_order_p, vect_slp_analyze_node_dependences)
(can_group_stmts_p, vect_check_gather_scatter)
(vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr)
(bump_vector_ptr, vect_permute_store_chain, vect_setup_realignment)
(vect_permute_load_chain, vect_shift_permute_load_chain)
(vect_transform_grouped_load)
(vect_record_grouped_load_vectors): Likewise.
* tree-vect-loop.c (vect_fixup_reduc_chain)
(get_initial_def_for_reduction, vect_create_epilog_for_reduction)
(vectorize_fold_left_reduction, is_nonwrapping_integer_induction)
(vectorizable_reduction, vectorizable_induction)
(vectorizable_live_operation, vect_loop_kill_debug_uses): Likewise.
* tree-vect-patterns.c (type_conversion_p, adjust_bool_stmts)
(vect_get_load_store_mask): Likewise.
* tree-vect-slp.c (vect_get_place_in_interleaving_chain)
(vect_analyze_slp_instance, vect_mask_constant_operand_p): Likewise.
* tree-vect-stmts.c (vect_mark_relevant)
(is_simple_and_all_uses_invariant)
(exist_non_indexing_operands_for_use_p, process_use)
(vect_init_vector_1, vect_init_vector, vect_get_vec_def_for_operand_1)
(vect_get_vec_def_for_operand, vect_get_vec_defs)
(vect_finish_stmt_generation_1, vect_finish_replace_stmt)
(vect_finish_stmt_generation, vect_truncate_gather_scatter_offset)
(compare_step_with_zero, vect_get_store_rhs, get_group_load_store_type)
(get_negative_load_store_type, get_load_store_type)
(vect_check_load_store_mask, vect_check_store_rhs)
(vect_build_gather_load_calls, vect_get_strided_load_store_ops)
(vectorizable_bswap, vectorizable_call, vectorizable_simd_clone_call)
(vect_create_vectorized_demotion_stmts, vectorizable_conversion)
(vectorizable_assignment, vectorizable_shift, vectorizable_operation)
(get_group_alias_ptr_type, vectorizable_store, hoist_defs_of_uses)
(vectorizable_load, vectorizable_condition, vectorizable_comparison)
(vect_analyze_stmt, vect_transform_stmt, vect_remove_stores)
(supportable_widening_operation): Likewise.
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-data-refs.c (vect_describe_gather_scatter_call): Take * tree-vect-data-refs.c (vect_describe_gather_scatter_call): Take
a stmt_vec_info instead of a gcall. a stmt_vec_info instead of a gcall.
(vect_check_gather_scatter): Update call accordingly. (vect_check_gather_scatter): Update call accordingly.
......
...@@ -236,22 +236,20 @@ vect_get_internal_def (vec_info *vinfo, tree op) ...@@ -236,22 +236,20 @@ vect_get_internal_def (vec_info *vinfo, tree op)
return NULL; return NULL;
} }
/* Check whether NAME, an ssa-name used in USE_STMT, /* Check whether NAME, an ssa-name used in STMT_VINFO,
is a result of a type promotion, such that: is a result of a type promotion, such that:
DEF_STMT: NAME = NOP (name0) DEF_STMT: NAME = NOP (name0)
If CHECK_SIGN is TRUE, check that either both types are signed or both are If CHECK_SIGN is TRUE, check that either both types are signed or both are
unsigned. */ unsigned. */
static bool static bool
type_conversion_p (tree name, gimple *use_stmt, bool check_sign, type_conversion_p (tree name, stmt_vec_info stmt_vinfo, bool check_sign,
tree *orig_type, gimple **def_stmt, bool *promotion) tree *orig_type, gimple **def_stmt, bool *promotion)
{ {
stmt_vec_info stmt_vinfo;
tree type = TREE_TYPE (name); tree type = TREE_TYPE (name);
tree oprnd0; tree oprnd0;
enum vect_def_type dt; enum vect_def_type dt;
stmt_vinfo = vinfo_for_stmt (use_stmt);
stmt_vec_info def_stmt_info; stmt_vec_info def_stmt_info;
if (!vect_is_simple_use (name, stmt_vinfo->vinfo, &dt, &def_stmt_info, if (!vect_is_simple_use (name, stmt_vinfo->vinfo, &dt, &def_stmt_info,
def_stmt)) def_stmt))
...@@ -3498,15 +3496,13 @@ sort_after_uid (const void *p1, const void *p2) ...@@ -3498,15 +3496,13 @@ sort_after_uid (const void *p1, const void *p2)
} }
/* Create pattern stmts for all stmts participating in the bool pattern /* Create pattern stmts for all stmts participating in the bool pattern
specified by BOOL_STMT_SET and its root STMT with the desired type specified by BOOL_STMT_SET and its root STMT_INFO with the desired type
OUT_TYPE. Return the def of the pattern root. */ OUT_TYPE. Return the def of the pattern root. */
static tree static tree
adjust_bool_stmts (hash_set <gimple *> &bool_stmt_set, adjust_bool_stmts (hash_set <gimple *> &bool_stmt_set,
tree out_type, gimple *stmt) tree out_type, stmt_vec_info stmt_info)
{ {
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
/* Gather original stmts in the bool pattern in their order of appearance /* Gather original stmts in the bool pattern in their order of appearance
in the IL. */ in the IL. */
auto_vec<gimple *> bool_stmts (bool_stmt_set.elements ()); auto_vec<gimple *> bool_stmts (bool_stmt_set.elements ());
...@@ -4126,19 +4122,19 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out) ...@@ -4126,19 +4122,19 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out)
return pattern_stmt; return pattern_stmt;
} }
/* STMT is a load or store. If the load or store is conditional, return /* STMT_INFO is a load or store. If the load or store is conditional, return
the boolean condition under which it occurs, otherwise return null. */ the boolean condition under which it occurs, otherwise return null. */
static tree static tree
vect_get_load_store_mask (gimple *stmt) vect_get_load_store_mask (stmt_vec_info stmt_info)
{ {
if (gassign *def_assign = dyn_cast <gassign *> (stmt)) if (gassign *def_assign = dyn_cast <gassign *> (stmt_info->stmt))
{ {
gcc_assert (gimple_assign_single_p (def_assign)); gcc_assert (gimple_assign_single_p (def_assign));
return NULL_TREE; return NULL_TREE;
} }
if (gcall *def_call = dyn_cast <gcall *> (stmt)) if (gcall *def_call = dyn_cast <gcall *> (stmt_info->stmt))
{ {
internal_fn ifn = gimple_call_internal_fn (def_call); internal_fn ifn = gimple_call_internal_fn (def_call);
int mask_index = internal_fn_mask_index (ifn); int mask_index = internal_fn_mask_index (ifn);
......
...@@ -195,14 +195,14 @@ vect_free_oprnd_info (vec<slp_oprnd_info> &oprnds_info) ...@@ -195,14 +195,14 @@ vect_free_oprnd_info (vec<slp_oprnd_info> &oprnds_info)
} }
/* Find the place of the data-ref in STMT in the interleaving chain that starts /* Find the place of the data-ref in STMT_INFO in the interleaving chain
from FIRST_STMT. Return -1 if the data-ref is not a part of the chain. */ that starts from FIRST_STMT_INFO. Return -1 if the data-ref is not a part
of the chain. */
int int
vect_get_place_in_interleaving_chain (gimple *stmt, gimple *first_stmt) vect_get_place_in_interleaving_chain (stmt_vec_info stmt_info,
stmt_vec_info first_stmt_info)
{ {
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
stmt_vec_info first_stmt_info = vinfo_for_stmt (first_stmt);
stmt_vec_info next_stmt_info = first_stmt_info; stmt_vec_info next_stmt_info = first_stmt_info;
int result = 0; int result = 0;
...@@ -1918,9 +1918,8 @@ calculate_unrolling_factor (poly_uint64 nunits, unsigned int group_size) ...@@ -1918,9 +1918,8 @@ calculate_unrolling_factor (poly_uint64 nunits, unsigned int group_size)
static bool static bool
vect_analyze_slp_instance (vec_info *vinfo, vect_analyze_slp_instance (vec_info *vinfo,
gimple *stmt, unsigned max_tree_size) stmt_vec_info stmt_info, unsigned max_tree_size)
{ {
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
slp_instance new_instance; slp_instance new_instance;
slp_tree node; slp_tree node;
unsigned int group_size; unsigned int group_size;
...@@ -3118,13 +3117,12 @@ vect_slp_bb (basic_block bb) ...@@ -3118,13 +3117,12 @@ vect_slp_bb (basic_block bb)
/* Return 1 if vector type of boolean constant which is OPNUM /* Return 1 if vector type of boolean constant which is OPNUM
operand in statement STMT is a boolean vector. */ operand in statement STMT_VINFO is a boolean vector. */
static bool static bool
vect_mask_constant_operand_p (gimple *stmt, int opnum) vect_mask_constant_operand_p (stmt_vec_info stmt_vinfo, int opnum)
{ {
stmt_vec_info stmt_vinfo = vinfo_for_stmt (stmt); enum tree_code code = gimple_expr_code (stmt_vinfo->stmt);
enum tree_code code = gimple_expr_code (stmt);
tree op, vectype; tree op, vectype;
enum vect_def_type dt; enum vect_def_type dt;
...@@ -3132,6 +3130,7 @@ vect_mask_constant_operand_p (gimple *stmt, int opnum) ...@@ -3132,6 +3130,7 @@ vect_mask_constant_operand_p (gimple *stmt, int opnum)
on the other comparison operand. */ on the other comparison operand. */
if (TREE_CODE_CLASS (code) == tcc_comparison) if (TREE_CODE_CLASS (code) == tcc_comparison)
{ {
gassign *stmt = as_a <gassign *> (stmt_vinfo->stmt);
if (opnum) if (opnum)
op = gimple_assign_rhs1 (stmt); op = gimple_assign_rhs1 (stmt);
else else
...@@ -3145,6 +3144,7 @@ vect_mask_constant_operand_p (gimple *stmt, int opnum) ...@@ -3145,6 +3144,7 @@ vect_mask_constant_operand_p (gimple *stmt, int opnum)
if (code == COND_EXPR) if (code == COND_EXPR)
{ {
gassign *stmt = as_a <gassign *> (stmt_vinfo->stmt);
tree cond = gimple_assign_rhs1 (stmt); tree cond = gimple_assign_rhs1 (stmt);
if (TREE_CODE (cond) == SSA_NAME) if (TREE_CODE (cond) == SSA_NAME)
......
...@@ -627,13 +627,6 @@ loop_vec_info_for_loop (struct loop *loop) ...@@ -627,13 +627,6 @@ loop_vec_info_for_loop (struct loop *loop)
return (loop_vec_info) loop->aux; return (loop_vec_info) loop->aux;
} }
static inline bool
nested_in_vect_loop_p (struct loop *loop, gimple *stmt)
{
return (loop->inner
&& (loop->inner == (gimple_bb (stmt))->loop_father));
}
typedef struct _bb_vec_info : public vec_info typedef struct _bb_vec_info : public vec_info
{ {
_bb_vec_info (gimple_stmt_iterator, gimple_stmt_iterator, vec_info_shared *); _bb_vec_info (gimple_stmt_iterator, gimple_stmt_iterator, vec_info_shared *);
...@@ -1119,6 +1112,13 @@ set_vinfo_for_stmt (gimple *stmt, stmt_vec_info info) ...@@ -1119,6 +1112,13 @@ set_vinfo_for_stmt (gimple *stmt, stmt_vec_info info)
} }
} }
static inline bool
nested_in_vect_loop_p (struct loop *loop, stmt_vec_info stmt_info)
{
return (loop->inner
&& (loop->inner == (gimple_bb (stmt_info->stmt))->loop_father));
}
/* Return the earlier statement between STMT1_INFO and STMT2_INFO. */ /* Return the earlier statement between STMT1_INFO and STMT2_INFO. */
static inline stmt_vec_info static inline stmt_vec_info
...@@ -1493,8 +1493,8 @@ extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *, ...@@ -1493,8 +1493,8 @@ extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *,
extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *, extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *,
tree *, stmt_vec_info * = NULL, tree *, stmt_vec_info * = NULL,
gimple ** = NULL); gimple ** = NULL);
extern bool supportable_widening_operation (enum tree_code, gimple *, tree, extern bool supportable_widening_operation (enum tree_code, stmt_vec_info,
tree, enum tree_code *, tree, tree, enum tree_code *,
enum tree_code *, int *, enum tree_code *, int *,
vec<tree> *); vec<tree> *);
extern bool supportable_narrowing_operation (enum tree_code, tree, tree, extern bool supportable_narrowing_operation (enum tree_code, tree, tree,
...@@ -1505,26 +1505,26 @@ extern void free_stmt_vec_info (gimple *stmt); ...@@ -1505,26 +1505,26 @@ extern void free_stmt_vec_info (gimple *stmt);
extern unsigned record_stmt_cost (stmt_vector_for_cost *, int, extern unsigned record_stmt_cost (stmt_vector_for_cost *, int,
enum vect_cost_for_stmt, stmt_vec_info, enum vect_cost_for_stmt, stmt_vec_info,
int, enum vect_cost_model_location); int, enum vect_cost_model_location);
extern stmt_vec_info vect_finish_replace_stmt (gimple *, gimple *); extern stmt_vec_info vect_finish_replace_stmt (stmt_vec_info, gimple *);
extern stmt_vec_info vect_finish_stmt_generation (gimple *, gimple *, extern stmt_vec_info vect_finish_stmt_generation (stmt_vec_info, gimple *,
gimple_stmt_iterator *); gimple_stmt_iterator *);
extern bool vect_mark_stmts_to_be_vectorized (loop_vec_info); extern bool vect_mark_stmts_to_be_vectorized (loop_vec_info);
extern tree vect_get_store_rhs (gimple *); extern tree vect_get_store_rhs (stmt_vec_info);
extern tree vect_get_vec_def_for_operand_1 (gimple *, enum vect_def_type); extern tree vect_get_vec_def_for_operand_1 (stmt_vec_info, enum vect_def_type);
extern tree vect_get_vec_def_for_operand (tree, gimple *, tree = NULL); extern tree vect_get_vec_def_for_operand (tree, stmt_vec_info, tree = NULL);
extern void vect_get_vec_defs (tree, tree, gimple *, vec<tree> *, extern void vect_get_vec_defs (tree, tree, stmt_vec_info, vec<tree> *,
vec<tree> *, slp_tree); vec<tree> *, slp_tree);
extern void vect_get_vec_defs_for_stmt_copy (enum vect_def_type *, extern void vect_get_vec_defs_for_stmt_copy (enum vect_def_type *,
vec<tree> *, vec<tree> *); vec<tree> *, vec<tree> *);
extern tree vect_init_vector (gimple *, tree, tree, extern tree vect_init_vector (stmt_vec_info, tree, tree,
gimple_stmt_iterator *); gimple_stmt_iterator *);
extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree); extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree);
extern bool vect_transform_stmt (gimple *, gimple_stmt_iterator *, extern bool vect_transform_stmt (stmt_vec_info, gimple_stmt_iterator *,
bool *, slp_tree, slp_instance); bool *, slp_tree, slp_instance);
extern void vect_remove_stores (gimple *); extern void vect_remove_stores (stmt_vec_info);
extern bool vect_analyze_stmt (gimple *, bool *, slp_tree, slp_instance, extern bool vect_analyze_stmt (stmt_vec_info, bool *, slp_tree, slp_instance,
stmt_vector_for_cost *); stmt_vector_for_cost *);
extern bool vectorizable_condition (gimple *, gimple_stmt_iterator *, extern bool vectorizable_condition (stmt_vec_info, gimple_stmt_iterator *,
stmt_vec_info *, tree, int, slp_tree, stmt_vec_info *, tree, int, slp_tree,
stmt_vector_for_cost *); stmt_vector_for_cost *);
extern void vect_get_load_cost (stmt_vec_info, int, bool, extern void vect_get_load_cost (stmt_vec_info, int, bool,
...@@ -1546,7 +1546,7 @@ extern tree vect_get_mask_type_for_stmt (stmt_vec_info); ...@@ -1546,7 +1546,7 @@ extern tree vect_get_mask_type_for_stmt (stmt_vec_info);
extern bool vect_can_force_dr_alignment_p (const_tree, unsigned int); extern bool vect_can_force_dr_alignment_p (const_tree, unsigned int);
extern enum dr_alignment_support vect_supportable_dr_alignment extern enum dr_alignment_support vect_supportable_dr_alignment
(struct data_reference *, bool); (struct data_reference *, bool);
extern tree vect_get_smallest_scalar_type (gimple *, HOST_WIDE_INT *, extern tree vect_get_smallest_scalar_type (stmt_vec_info, HOST_WIDE_INT *,
HOST_WIDE_INT *); HOST_WIDE_INT *);
extern bool vect_analyze_data_ref_dependences (loop_vec_info, unsigned int *); extern bool vect_analyze_data_ref_dependences (loop_vec_info, unsigned int *);
extern bool vect_slp_analyze_instance_dependence (slp_instance); extern bool vect_slp_analyze_instance_dependence (slp_instance);
...@@ -1558,36 +1558,36 @@ extern bool vect_analyze_data_ref_accesses (vec_info *); ...@@ -1558,36 +1558,36 @@ extern bool vect_analyze_data_ref_accesses (vec_info *);
extern bool vect_prune_runtime_alias_test_list (loop_vec_info); extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
extern bool vect_gather_scatter_fn_p (bool, bool, tree, tree, unsigned int, extern bool vect_gather_scatter_fn_p (bool, bool, tree, tree, unsigned int,
signop, int, internal_fn *, tree *); signop, int, internal_fn *, tree *);
extern bool vect_check_gather_scatter (gimple *, loop_vec_info, extern bool vect_check_gather_scatter (stmt_vec_info, loop_vec_info,
gather_scatter_info *); gather_scatter_info *);
extern bool vect_find_stmt_data_reference (loop_p, gimple *, extern bool vect_find_stmt_data_reference (loop_p, gimple *,
vec<data_reference_p> *); vec<data_reference_p> *);
extern bool vect_analyze_data_refs (vec_info *, poly_uint64 *); extern bool vect_analyze_data_refs (vec_info *, poly_uint64 *);
extern void vect_record_base_alignments (vec_info *); extern void vect_record_base_alignments (vec_info *);
extern tree vect_create_data_ref_ptr (gimple *, tree, struct loop *, tree, extern tree vect_create_data_ref_ptr (stmt_vec_info, tree, struct loop *, tree,
tree *, gimple_stmt_iterator *, tree *, gimple_stmt_iterator *,
gimple **, bool, bool *, gimple **, bool, bool *,
tree = NULL_TREE, tree = NULL_TREE); tree = NULL_TREE, tree = NULL_TREE);
extern tree bump_vector_ptr (tree, gimple *, gimple_stmt_iterator *, gimple *, extern tree bump_vector_ptr (tree, gimple *, gimple_stmt_iterator *,
tree); stmt_vec_info, tree);
extern void vect_copy_ref_info (tree, tree); extern void vect_copy_ref_info (tree, tree);
extern tree vect_create_destination_var (tree, tree); extern tree vect_create_destination_var (tree, tree);
extern bool vect_grouped_store_supported (tree, unsigned HOST_WIDE_INT); extern bool vect_grouped_store_supported (tree, unsigned HOST_WIDE_INT);
extern bool vect_store_lanes_supported (tree, unsigned HOST_WIDE_INT, bool); extern bool vect_store_lanes_supported (tree, unsigned HOST_WIDE_INT, bool);
extern bool vect_grouped_load_supported (tree, bool, unsigned HOST_WIDE_INT); extern bool vect_grouped_load_supported (tree, bool, unsigned HOST_WIDE_INT);
extern bool vect_load_lanes_supported (tree, unsigned HOST_WIDE_INT, bool); extern bool vect_load_lanes_supported (tree, unsigned HOST_WIDE_INT, bool);
extern void vect_permute_store_chain (vec<tree> ,unsigned int, gimple *, extern void vect_permute_store_chain (vec<tree> ,unsigned int, stmt_vec_info,
gimple_stmt_iterator *, vec<tree> *); gimple_stmt_iterator *, vec<tree> *);
extern tree vect_setup_realignment (gimple *, gimple_stmt_iterator *, tree *, extern tree vect_setup_realignment (stmt_vec_info, gimple_stmt_iterator *,
enum dr_alignment_support, tree, tree *, enum dr_alignment_support, tree,
struct loop **); struct loop **);
extern void vect_transform_grouped_load (gimple *, vec<tree> , int, extern void vect_transform_grouped_load (stmt_vec_info, vec<tree> , int,
gimple_stmt_iterator *); gimple_stmt_iterator *);
extern void vect_record_grouped_load_vectors (gimple *, vec<tree> ); extern void vect_record_grouped_load_vectors (stmt_vec_info, vec<tree>);
extern tree vect_get_new_vect_var (tree, enum vect_var_kind, const char *); extern tree vect_get_new_vect_var (tree, enum vect_var_kind, const char *);
extern tree vect_get_new_ssa_name (tree, enum vect_var_kind, extern tree vect_get_new_ssa_name (tree, enum vect_var_kind,
const char * = NULL); const char * = NULL);
extern tree vect_create_addr_base_for_vector_ref (gimple *, gimple_seq *, extern tree vect_create_addr_base_for_vector_ref (stmt_vec_info, gimple_seq *,
tree, tree = NULL_TREE); tree, tree = NULL_TREE);
/* In tree-vect-loop.c. */ /* In tree-vect-loop.c. */
...@@ -1613,16 +1613,16 @@ extern tree vect_get_loop_mask (gimple_stmt_iterator *, vec_loop_masks *, ...@@ -1613,16 +1613,16 @@ extern tree vect_get_loop_mask (gimple_stmt_iterator *, vec_loop_masks *,
/* Drive for loop transformation stage. */ /* Drive for loop transformation stage. */
extern struct loop *vect_transform_loop (loop_vec_info); extern struct loop *vect_transform_loop (loop_vec_info);
extern loop_vec_info vect_analyze_loop_form (struct loop *, vec_info_shared *); extern loop_vec_info vect_analyze_loop_form (struct loop *, vec_info_shared *);
extern bool vectorizable_live_operation (gimple *, gimple_stmt_iterator *, extern bool vectorizable_live_operation (stmt_vec_info, gimple_stmt_iterator *,
slp_tree, int, stmt_vec_info *, slp_tree, int, stmt_vec_info *,
stmt_vector_for_cost *); stmt_vector_for_cost *);
extern bool vectorizable_reduction (gimple *, gimple_stmt_iterator *, extern bool vectorizable_reduction (stmt_vec_info, gimple_stmt_iterator *,
stmt_vec_info *, slp_tree, slp_instance, stmt_vec_info *, slp_tree, slp_instance,
stmt_vector_for_cost *); stmt_vector_for_cost *);
extern bool vectorizable_induction (gimple *, gimple_stmt_iterator *, extern bool vectorizable_induction (stmt_vec_info, gimple_stmt_iterator *,
stmt_vec_info *, slp_tree, stmt_vec_info *, slp_tree,
stmt_vector_for_cost *); stmt_vector_for_cost *);
extern tree get_initial_def_for_reduction (gimple *, tree, tree *); extern tree get_initial_def_for_reduction (stmt_vec_info, tree, tree *);
extern bool vect_worthwhile_without_simd_p (vec_info *, tree_code); extern bool vect_worthwhile_without_simd_p (vec_info *, tree_code);
extern int vect_get_known_peeling_cost (loop_vec_info, int, int *, extern int vect_get_known_peeling_cost (loop_vec_info, int, int *,
stmt_vector_for_cost *, stmt_vector_for_cost *,
...@@ -1643,13 +1643,13 @@ extern void vect_detect_hybrid_slp (loop_vec_info); ...@@ -1643,13 +1643,13 @@ extern void vect_detect_hybrid_slp (loop_vec_info);
extern void vect_get_slp_defs (vec<tree> , slp_tree, vec<vec<tree> > *); extern void vect_get_slp_defs (vec<tree> , slp_tree, vec<vec<tree> > *);
extern bool vect_slp_bb (basic_block); extern bool vect_slp_bb (basic_block);
extern stmt_vec_info vect_find_last_scalar_stmt_in_slp (slp_tree); extern stmt_vec_info vect_find_last_scalar_stmt_in_slp (slp_tree);
extern bool is_simple_and_all_uses_invariant (gimple *, loop_vec_info); extern bool is_simple_and_all_uses_invariant (stmt_vec_info, loop_vec_info);
extern bool can_duplicate_and_interleave_p (unsigned int, machine_mode, extern bool can_duplicate_and_interleave_p (unsigned int, machine_mode,
unsigned int * = NULL, unsigned int * = NULL,
tree * = NULL, tree * = NULL); tree * = NULL, tree * = NULL);
extern void duplicate_and_interleave (gimple_seq *, tree, vec<tree>, extern void duplicate_and_interleave (gimple_seq *, tree, vec<tree>,
unsigned int, vec<tree> &); unsigned int, vec<tree> &);
extern int vect_get_place_in_interleaving_chain (gimple *, gimple *); extern int vect_get_place_in_interleaving_chain (stmt_vec_info, stmt_vec_info);
/* In tree-vect-patterns.c. */ /* In tree-vect-patterns.c. */
/* Pattern recognition functions. /* Pattern recognition functions.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment