projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sparc: implement float->unsigned conversions
[libfirm]
/
ir
/
be
/
bechordal_main.c
diff --git
a/ir/be/bechordal_main.c
b/ir/be/bechordal_main.c
index
1ee54e9
..
192a571
100644
(file)
--- a/
ir/be/bechordal_main.c
+++ b/
ir/be/bechordal_main.c
@@
-22,7
+22,6
@@
* @brief Driver for the chordal register allocator.
* @author Sebastian Hack
* @date 29.11.2005
* @brief Driver for the chordal register allocator.
* @author Sebastian Hack
* @date 29.11.2005
- * @version $Id$
*/
#include "config.h"
*/
#include "config.h"
@@
-47,9
+46,9
@@
#include "irdump.h"
#include "irdom.h"
#include "ircons.h"
#include "irdump.h"
#include "irdom.h"
#include "ircons.h"
-#include "irbitset.h"
#include "irnode.h"
#include "ircons.h"
#include "irnode.h"
#include "ircons.h"
+#include "irtools.h"
#include "debug.h"
#include "execfreq.h"
#include "iredges_t.h"
#include "debug.h"
#include "execfreq.h"
#include "iredges_t.h"
@@
-105,11
+104,7
@@
static const lc_opt_enum_int_items_t lower_perm_items[] = {
{ NULL, 0 }
};
{ NULL, 0 }
};
-static const lc_opt_enum_int_items_t lower_perm_stat_items[] = {
- { NULL, 0 }
-};
-
-static const lc_opt_enum_int_items_t dump_items[] = {
+static const lc_opt_enum_mask_items_t dump_items[] = {
{ "none", BE_CH_DUMP_NONE },
{ "spill", BE_CH_DUMP_SPILL },
{ "live", BE_CH_DUMP_LIVE },
{ "none", BE_CH_DUMP_NONE },
{ "spill", BE_CH_DUMP_SPILL },
{ "live", BE_CH_DUMP_LIVE },
@@
-136,7
+131,7
@@
static lc_opt_enum_int_var_t lower_perm_var = {
&options.lower_perm_opt, lower_perm_items
};
&options.lower_perm_opt, lower_perm_items
};
-static lc_opt_enum_
int
_var_t dump_var = {
+static lc_opt_enum_
mask
_var_t dump_var = {
&options.dump_flags, dump_items
};
&options.dump_flags, dump_items
};
@@
-145,9
+140,9
@@
static lc_opt_enum_int_var_t be_ch_vrfy_var = {
};
static const lc_opt_table_entry_t be_chordal_options[] = {
};
static const lc_opt_table_entry_t be_chordal_options[] = {
- LC_OPT_ENT_ENUM_
PTR
("perm", "perm lowering options", &lower_perm_var),
+ LC_OPT_ENT_ENUM_
INT
("perm", "perm lowering options", &lower_perm_var),
LC_OPT_ENT_ENUM_MASK("dump", "select dump phases", &dump_var),
LC_OPT_ENT_ENUM_MASK("dump", "select dump phases", &dump_var),
- LC_OPT_ENT_ENUM_
PTR
("verify", "verify options", &be_ch_vrfy_var),
+ LC_OPT_ENT_ENUM_
INT
("verify", "verify options", &be_ch_vrfy_var),
LC_OPT_LAST
};
LC_OPT_LAST
};
@@
-183,7
+178,9
@@
static void dump(unsigned mask, ir_graph *irg,
}
/**
}
/**
- * Checks for every reload if its user can perform the load on itself.
+ * Post-Walker: Checks for the given reload if has only one user that can perform the
+ * reload as part of its address mode.
+ * Fold the reload into the user it that is possible.
*/
static void memory_operand_walker(ir_node *irn, void *env)
{
*/
static void memory_operand_walker(ir_node *irn, void *env)
{
@@
-214,12
+211,13
@@
static void memory_operand_walker(ir_node *irn, void *env)
}
}
}
}
- /* kill the Reload */
+ /* kill the Reload
if it was folded
*/
if (get_irn_n_edges(irn) == 0) {
ir_graph *irg = get_irn_irg(irn);
if (get_irn_n_edges(irn) == 0) {
ir_graph *irg = get_irn_irg(irn);
+ ir_mode *frame_mode = get_irn_mode(get_irn_n(irn, n_be_Reload_frame));
sched_remove(irn);
sched_remove(irn);
- set_irn_n(irn, n_be_Reload_mem, new_r_Bad(irg));
- set_irn_n(irn, n_be_Reload_frame, new_r_Bad(irg));
+ set_irn_n(irn, n_be_Reload_mem, new_r_Bad(irg
, mode_X
));
+ set_irn_n(irn, n_be_Reload_frame, new_r_Bad(irg
, frame_mode
));
}
}
}
}
@@
-248,10
+246,11
@@
static void pre_spill(post_spill_env_t *pse, const arch_register_class_t *cls)
chordal_env->border_heads = pmap_create();
chordal_env->allocatable_regs = bitset_malloc(chordal_env->cls->n_regs);
chordal_env->border_heads = pmap_create();
chordal_env->allocatable_regs = bitset_malloc(chordal_env->cls->n_regs);
- be_assure_liveness(irg);
- be_liveness_assure_chk(be_get_irg_liveness(irg));
+ be_assure_live_chk(irg);
- stat_ev_do(pse->pre_spill_cost = be_estimate_irg_costs(irg, exec_freq));
+ if (stat_ev_enabled) {
+ pse->pre_spill_cost = be_estimate_irg_costs(irg, exec_freq);
+ }
/* put all ignore registers into the ignore register set. */
be_put_allocatable_regs(irg, pse->cls, chordal_env->allocatable_regs);
/* put all ignore registers into the ignore register set. */
be_put_allocatable_regs(irg, pse->cls, chordal_env->allocatable_regs);
@@
-314,7
+313,7
@@
static void post_spill(post_spill_env_t *pse, int iteration)
chordal_env->ifg = be_create_ifg(chordal_env);
be_timer_pop(T_RA_IFG);
chordal_env->ifg = be_create_ifg(chordal_env);
be_timer_pop(T_RA_IFG);
-
stat_ev_if
{
+
if (stat_ev_enabled)
{
be_ifg_stat_t stat;
be_node_stats_t node_stats;
be_ifg_stat_t stat;
be_node_stats_t node_stats;
@@
-379,8
+378,6
@@
static void be_ra_chordal_main(ir_graph *irg)
be_timer_push(T_RA_PROLOG);
be_timer_push(T_RA_PROLOG);
- be_assure_liveness(irg);
-
chordal_env.obst = &obst;
chordal_env.opts = &options;
chordal_env.irg = irg;
chordal_env.obst = &obst;
chordal_env.opts = &options;
chordal_env.irg = irg;
@@
-392,7
+389,7
@@
static void be_ra_chordal_main(ir_graph *irg)
be_timer_pop(T_RA_PROLOG);
be_timer_pop(T_RA_PROLOG);
-
stat_ev_if
{
+
if (stat_ev_enabled)
{
be_collect_node_stats(&last_node_stats, irg);
}
be_collect_node_stats(&last_node_stats, irg);
}
@@
-409,11
+406,11
@@
static void be_ra_chordal_main(ir_graph *irg)
stat_ev_ctx_push_str("bechordal_cls", cls->name);
stat_ev_ctx_push_str("bechordal_cls", cls->name);
-
stat_ev_if
{
+
if (stat_ev_enabled)
{
be_do_stat_reg_pressure(irg, cls);
}
be_do_stat_reg_pressure(irg, cls);
}
-
memcpy(&pse.cenv, &chordal_env, sizeof(chordal_env))
;
+
pse.cenv = chordal_env
;
pse.irg = irg;
pre_spill(&pse, cls);
pse.irg = irg;
pre_spill(&pse, cls);
@@
-425,7
+422,7
@@
static void be_ra_chordal_main(ir_graph *irg)
post_spill(&pse, 0);
post_spill(&pse, 0);
-
stat_ev_if
{
+
if (stat_ev_enabled)
{
be_node_stats_t node_stats;
be_collect_node_stats(&node_stats, irg);
be_node_stats_t node_stats;
be_collect_node_stats(&node_stats, irg);
@@
-447,12
+444,11
@@
static void be_ra_chordal_main(ir_graph *irg)
be_timer_pop(T_VERIFY);
be_timer_push(T_RA_EPILOG);
be_timer_pop(T_VERIFY);
be_timer_push(T_RA_EPILOG);
- lower_nodes_after_ra(irg,
- options.lower_perm_opt&BE_CH_LOWER_PERM_COPY ? 1 : 0);
+ lower_nodes_after_ra(irg, options.lower_perm_opt == BE_CH_LOWER_PERM_COPY);
dump(BE_CH_DUMP_LOWER, irg, NULL, "belower-after-ra");
obstack_free(&obst, NULL);
dump(BE_CH_DUMP_LOWER, irg, NULL, "belower-after-ra");
obstack_free(&obst, NULL);
- be_
liveness_invalidate(be_get_irg_liveness(irg)
);
+ be_
invalidate_live_sets(irg
);
be_timer_pop(T_RA_EPILOG);
be_timer_pop(T_RA_OTHER);
be_timer_pop(T_RA_EPILOG);
be_timer_pop(T_RA_OTHER);