diff options
author | Richard Biener <rguenther@suse.de> | 2018-05-16 13:08:04 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-05-16 13:08:04 +0000 |
commit | 68435eb293a6b9c161936bccab66e4b1f702372b (patch) | |
tree | cc78ecc836cfbaccc33a2703cd1f0d2486754a71 /gcc/tree-vectorizer.c | |
parent | 311eb8168ea83b8b7ce76735fee8c594cda5a0e0 (diff) | |
download | gcc-68435eb293a6b9c161936bccab66e4b1f702372b.zip gcc-68435eb293a6b9c161936bccab66e4b1f702372b.tar.gz gcc-68435eb293a6b9c161936bccab66e4b1f702372b.tar.bz2 |
tree-vectorizer.h (struct stmt_info_for_cost): Add where member.
2018-05-16 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (struct stmt_info_for_cost): Add where member.
(dump_stmt_cost): Declare.
(add_stmt_cost): Dump cost we add.
(add_stmt_costs): New function.
(vect_model_simple_cost, vect_model_store_cost, vect_model_load_cost):
No longer exported.
(vect_analyze_stmt): Adjust prototype.
(vectorizable_condition): Likewise.
(vectorizable_live_operation): Likewise.
(vectorizable_reduction): Likewise.
(vectorizable_induction): Likewise.
* tree-vect-loop.c (vect_analyze_loop_operations): Create local
cost vector to pass to vectorizable_ and record afterwards.
(vect_model_reduction_cost): Take cost vector argument and adjust.
(vect_model_induction_cost): Likewise.
(vectorizable_reduction): Likewise.
(vectorizable_induction): Likewise.
(vectorizable_live_operation): Likewise.
* tree-vect-slp.c (vect_create_new_slp_node): Initialize
SLP_TREE_NUMBER_OF_VEC_STMTS.
(vect_analyze_slp_cost_1): Remove.
(vect_analyze_slp_cost): Likewise.
(vect_slp_analyze_node_operations): Take visited args and
a target cost vector. Avoid processing already visited stmt sets.
(vect_slp_analyze_operations): Use a local cost vector to gather
costs and register those of non-discarded instances.
(vect_bb_vectorization_profitable_p): Use add_stmt_costs.
(vect_schedule_slp_instance): Remove copying of
SLP_TREE_NUMBER_OF_VEC_STMTS. Instead assert that it is not
zero.
* tree-vect-stmts.c (record_stmt_cost): Remove path directly
adding cost. Record cost entry location.
(vect_prologue_cost_for_slp_op): Function to compute cost of
a constant or invariant generated for SLP vect in the prologue,
split out from vect_analyze_slp_cost_1.
(vect_model_simple_cost): Make static. Adjust for SLP costing.
(vect_model_promotion_demotion_cost): Likewise.
(vect_model_store_cost): Likewise, make static.
(vect_model_load_cost): Likewise.
(vectorizable_bswap): Add cost vector arg and adjust.
(vectorizable_call): Likewise.
(vectorizable_simd_clone_call): Likewise.
(vectorizable_conversion): Likewise.
(vectorizable_assignment): Likewise.
(vectorizable_shift): Likewise.
(vectorizable_operation): Likewise.
(vectorizable_store): Likewise.
(vectorizable_load): Likewise.
(vectorizable_condition): Likewise.
(vectorizable_comparison): Likewise.
(can_vectorize_live_stmts): Likewise.
(vect_analyze_stmt): Likewise.
(vect_transform_stmt): Adjust calls to vectorizable_*.
* tree-vectorizer.c: Include gimple-pretty-print.h.
(dump_stmt_cost): New function.
From-SVN: r260289
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r-- | gcc/tree-vectorizer.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index fb81b98..86cd025 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -78,6 +78,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-scalar-evolution.h" #include "stringpool.h" #include "attribs.h" +#include "gimple-pretty-print.h" /* Loop or bb location. */ @@ -85,6 +86,96 @@ source_location vect_location; /* Vector mapping GIMPLE stmt to stmt_vec_info. */ vec<stmt_vec_info> stmt_vec_info_vec; + +/* Dump a cost entry according to args to F. */ + +void +dump_stmt_cost (FILE *f, void *data, int count, enum vect_cost_for_stmt kind, + stmt_vec_info stmt_info, int misalign, + enum vect_cost_model_location where) +{ + fprintf (f, "%p ", data); + if (stmt_info) + { + print_gimple_expr (f, STMT_VINFO_STMT (stmt_info), 0, TDF_SLIM); + fprintf (f, " "); + } + else + fprintf (f, "<unknown> "); + fprintf (f, "%d times ", count); + const char *ks = "unknown"; + switch (kind) + { + case scalar_stmt: + ks = "scalar_stmt"; + break; + case scalar_load: + ks = "scalar_load"; + break; + case scalar_store: + ks = "scalar_store"; + break; + case vector_stmt: + ks = "vector_stmt"; + break; + case vector_load: + ks = "vector_load"; + break; + case vector_gather_load: + ks = "vector_gather_load"; + break; + case unaligned_load: + ks = "unaligned_load"; + break; + case unaligned_store: + ks = "unaligned_store"; + break; + case vector_store: + ks = "unaligned_store"; + break; + case vector_scatter_store: + ks = "unaligned_store"; + break; + case vec_to_scalar: + ks = "unaligned_store"; + break; + case scalar_to_vec: + ks = "unaligned_store"; + break; + case cond_branch_not_taken: + ks = "unaligned_store"; + break; + case cond_branch_taken: + ks = "unaligned_store"; + break; + case vec_perm: + ks = "unaligned_store"; + break; + case vec_promote_demote: + ks = "unaligned_store"; + break; + case vec_construct: + ks = "unaligned_store"; + break; + } + fprintf (f, "%s ", ks); + if (kind == unaligned_load || kind == unaligned_store) + fprintf (f, "(misalign %d) ", misalign); + const char *ws = "unknown"; + switch (where) + { + case vect_prologue: + ws = "prologue"; + break; + case vect_body: + ws = "body"; + break; + case vect_epilogue: + ws = "epilogue"; + break; + } + fprintf (f, "in %s\n", ws); +} /* For mapping simduid to vectorization factor. */ |