diff options
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. */ |