projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added support for SymConst(ofs_ent)
[libfirm]
/
ir
/
be
/
bechordal_main.c
diff --git
a/ir/be/bechordal_main.c
b/ir/be/bechordal_main.c
index
fd8d874
..
7041706
100644
(file)
--- a/
ir/be/bechordal_main.c
+++ b/
ir/be/bechordal_main.c
@@
-387,8
+387,10
@@
static INLINE void check_for_memory_operands(be_chordal_env_t *chordal_env) {
typedef struct _node_stat_t {
unsigned int n_phis; /**< Phis of the current register class. */
unsigned int n_mem_phis; /**< Memory Phis (Phis with spill operands). */
typedef struct _node_stat_t {
unsigned int n_phis; /**< Phis of the current register class. */
unsigned int n_mem_phis; /**< Memory Phis (Phis with spill operands). */
+ unsigned int n_copies; /**< Copies */
+ unsigned int n_perms; /**< Perms */
unsigned int n_spills; /**< Spill nodes */
unsigned int n_spills; /**< Spill nodes */
- unsigned int n_reloads; /**< Reloads
.
*/
+ unsigned int n_reloads; /**< Reloads */
} node_stat_t;
struct node_stat_walker {
} node_stat_t;
struct node_stat_walker {
@@
-414,6
+416,11
@@
static void node_stat_walker(ir_node *irn, void *data)
else if(arch_irn_classify(aenv, irn) & arch_irn_class_reload)
++env->stat->n_reloads;
else if(arch_irn_classify(aenv, irn) & arch_irn_class_reload)
++env->stat->n_reloads;
+ else if(arch_irn_classify(aenv, irn) & arch_irn_class_copy)
+ ++env->stat->n_copies;
+
+ else if(arch_irn_classify(aenv, irn) & arch_irn_class_perm)
+ ++env->stat->n_perms;
}
/* a mem phi is a PhiM with a mem phi operand or a Spill operand */
}
/* a mem phi is a PhiM with a mem phi operand or a Spill operand */
@@
-716,9
+723,10
@@
static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi)
if(stat_file) {
be_ifg_stat_t stat;
if(stat_file) {
be_ifg_stat_t stat;
- be_ifg_stat(
chordal_env.ifg, irg
, &stat);
+ be_ifg_stat(
&chordal_env
, &stat);
be_stat_ev("ifg_nodes", stat.n_nodes);
be_stat_ev("ifg_edges", stat.n_edges);
be_stat_ev("ifg_nodes", stat.n_nodes);
be_stat_ev("ifg_edges", stat.n_edges);
+ be_stat_ev("ifg_comps", stat.n_comps);
}
BE_TIMER_PUSH(ra_timer.t_verify);
}
BE_TIMER_PUSH(ra_timer.t_verify);
@@
-728,10
+736,17
@@
static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi)
BE_TIMER_POP(ra_timer.t_verify);
BE_TIMER_POP(ra_timer.t_verify);
+ if(stat_file) {
+ node_stats(&chordal_env, &node_stat);
+ be_stat_ev("perms_before_coal", node_stat.n_perms);
+ be_stat_ev("copies_before_coal", node_stat.n_copies);
+ }
+
/* copy minimization */
BE_TIMER_PUSH(ra_timer.t_copymin);
co_driver(&chordal_env);
BE_TIMER_POP(ra_timer.t_copymin);
/* copy minimization */
BE_TIMER_PUSH(ra_timer.t_copymin);
co_driver(&chordal_env);
BE_TIMER_POP(ra_timer.t_copymin);
+
dump(BE_CH_DUMP_COPYMIN, irg, chordal_env.cls, "-copymin", dump_ir_block_graph_sched);
BE_TIMER_PUSH(ra_timer.t_verify);
dump(BE_CH_DUMP_COPYMIN, irg, chordal_env.cls, "-copymin", dump_ir_block_graph_sched);
BE_TIMER_PUSH(ra_timer.t_verify);
@@
-761,13
+776,18
@@
static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi)
pmap_destroy(chordal_env.border_heads);
bitset_free(chordal_env.ignore_colors);
pmap_destroy(chordal_env.border_heads);
bitset_free(chordal_env.ignore_colors);
+ if(stat_file) {
+ node_stats(&chordal_env, &node_stat);
+ be_stat_ev("perms_after_coal", node_stat.n_perms);
+ be_stat_ev("copies_after_coal", node_stat.n_copies);
+ }
+
be_stat_ev_pop();
}
BE_TIMER_PUSH(ra_timer.t_spillslots);
be_stat_ev_pop();
}
BE_TIMER_PUSH(ra_timer.t_spillslots);
- if(coalesce_spill_slots)
- be_coalesce_spillslots(&chordal_env);
+ be_coalesce_spillslots(&chordal_env, coalesce_spill_slots);
dump(BE_CH_DUMP_SPILLSLOTS, irg, NULL, "-spillslots", dump_ir_block_graph_sched);
BE_TIMER_POP(ra_timer.t_spillslots);
dump(BE_CH_DUMP_SPILLSLOTS, irg, NULL, "-spillslots", dump_ir_block_graph_sched);
BE_TIMER_POP(ra_timer.t_spillslots);