{ FS_OPT_CONST_PHI, "constant evaluation on Phi node" },
{ FS_OPT_PREDICATE, "predicate optimization" },
{ FS_OPT_DEMORGAN, "optimization using DeMorgan's law" },
+ { FS_OPT_CMP_OP_OP, "CMP optimization: Cmp(OP(x), OP(y)) = Cmp(x, y)" },
+ { FS_OPT_CMP_OP_C, "CMP optimization: Cmp(OP(x), c1) = Cmp(x, c2)" },
+ { FS_OPT_CMP_CONV_CONV, "CMP optimization: Cmp(Conv(x), Conv(y)) = Cmp(x, y)" },
+ { FS_OPT_CMP_CONV, "CMP optimization: Cmp(Conv(x), Conv(y)) = Cmp(Conv(x), y)" },
+ { FS_OPT_CMP_TO_BOOL, "CMP optimization: Cmp(x, y) = BoolOP(x, y)" },
+ { FS_OPT_CMP_CNST_MAGN, "CMP optimization: reduced magnitude of a const" },
+ { FS_OPT_CMP_SHF_TO_AND, "CMP optimization: transformed shift into And" },
+ { FS_OPT_CMP_MOD_TO_AND, "CMP optimization: transformed Mod into And" },
{ FS_BE_IA32_LEA, "ia32 Backend transformation: Lea was created" },
{ FS_BE_IA32_LOAD_LEA, "ia32 Backend transformation: Load merged with a Lea" },
{ FS_BE_IA32_STORE_LEA, "ia32 Backend transformation: Store merged with a Lea" },
} /* simple_dump_opcode_hash */
/**
- * dumps an optimization hash into human readable form
+ * Return the name of an optimization.
*/
-static void simple_dump_opt_hash(dumper_t *dmp, pset *set, int index)
-{
+static const char *get_opt_name(int index) {
assert(index < (int) ARR_SIZE(opt_names) && "index out of range");
assert((int) opt_names[index].kind == index && "opt_names broken");
+ return opt_names[index].name;
+} /* get_opt_name */
+/**
+ * dumps an optimization hash into human readable form
+ */
+static void simple_dump_opt_hash(dumper_t *dmp, pset *set, int index)
+{
if (pset_count(set) > 0) {
opt_entry_t *entry;
+ const char *name = get_opt_name(index);
- fprintf(dmp->f, "\n%s:\n", opt_names[index].name);
+ fprintf(dmp->f, "\n%s:\n", name);
fprintf(dmp->f, "%-16s %-8s\n", "Opcode", "deref");
foreach_pset(set, entry) {
fprintf(dmp->f, "with local var adr params %12u\n", cnt_to_uint(&global->cnt[gcnt_call_with_local_adr]));
} /* simple_dump_param_tbl */
+/**
+ * dumps the optimization counter table
+ */
+static void simple_dump_opt_cnt(dumper_t *dmp, const counter_t *tbl, unsigned len) {
+ unsigned i;
+
+ fprintf(dmp->f, "\nOptimization counts:\n");
+ fprintf(dmp->f, "---------------------\n");
+
+ for (i = 0; i < len; ++i) {
+ unsigned cnt = cnt_to_uint(&tbl[i]);
+
+ if (cnt > 0) {
+ fprintf(dmp->f, "%8u %s\n", cnt, get_opt_name(i));
+ }
+ }
+} /* simple_dump_opt_cnt */
+
/**
* initialize the simple dumper
*/
simple_dump_graph,
simple_dump_const_tbl,
simple_dump_param_tbl,
+ simple_dump_opt_cnt,
simple_init,
simple_finish,
NULL,
/* FIXME: NYI */
} /* csv_dump_param_tbl */
+/**
+ * dumps the optimization counter
+ */
+static void csv_dump_opt_cnt(dumper_t *dmp, const counter_t *tbl, unsigned len) {
+ (void) dmp;
+ (void) tbl;
+ (void) len;
+ /* FIXME: NYI */
+} /* csv_dump_opt_cnt */
+
/**
* initialize the simple dumper
*/
csv_dump_graph,
csv_dump_const_tbl,
csv_dump_param_tbl,
+ csv_dump_opt_cnt,
csv_init,
csv_finish,
NULL,