projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
simplify and cleanup execfreq API
[libfirm]
/
ir
/
be
/
bechordal.c
diff --git
a/ir/be/bechordal.c
b/ir/be/bechordal.c
index
9b5da2b
..
ba9df02
100644
(file)
--- a/
ir/be/bechordal.c
+++ b/
ir/be/bechordal.c
@@
-22,7
+22,6
@@
* @brief Chordal register allocation.
* @author Sebastian Hack
* @date 08.12.2004
* @brief Chordal register allocation.
* @author Sebastian Hack
* @date 08.12.2004
- * @version $Id$
*/
#include "config.h"
*/
#include "config.h"
@@
-33,7
+32,6
@@
#include "list.h"
#include "bitset.h"
#include "raw_bitset.h"
#include "list.h"
#include "bitset.h"
#include "raw_bitset.h"
-#include "iterator.h"
#include "bipartite.h"
#include "hungarian.h"
#include "bipartite.h"
#include "hungarian.h"
@@
-44,7
+42,6
@@
#include "irdump.h"
#include "irdom.h"
#include "irtools.h"
#include "irdump.h"
#include "irdom.h"
#include "irtools.h"
-#include "irbitset.h"
#include "debug.h"
#include "iredges.h"
#include "debug.h"
#include "iredges.h"
@@
-178,8
+175,6
@@
static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env,
int *assignment;
pmap *partners;
int i, n_alloc;
int *assignment;
pmap *partners;
int i, n_alloc;
- size_t col;
- const ir_edge_t *edge;
ir_node *perm = NULL;
//int match_res, cost;
be_chordal_env_t *env = alloc_env->chordal_env;
ir_node *perm = NULL;
//int match_res, cost;
be_chordal_env_t *env = alloc_env->chordal_env;
@@
-198,7
+193,7
@@
static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env,
* Perms inserted before the constraint handling phase are considered to be
* correctly precolored. These Perms arise during the ABI handling phase.
*/
* Perms inserted before the constraint handling phase are considered to be
* correctly precolored. These Perms arise during the ABI handling phase.
*/
- if (!insn->has_constraints)
+ if (!insn->has_constraints
|| is_Phi(irn)
)
goto end;
n_regs = env->cls->n_regs;
goto end;
n_regs = env->cls->n_regs;
@@
-334,7
+329,7
@@
static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env,
DBG((dbg, LEVEL_2, "\tsetting %+F to register %s\n", irn, reg->name));
}
DBG((dbg, LEVEL_2, "\tsetting %+F to register %s\n", irn, reg->name));
}
- irn =
(ir_node*)pmap_get(
partners, alloc_nodes[i]);
+ irn =
pmap_get(ir_node,
partners, alloc_nodes[i]);
if (irn != NULL) {
arch_set_irn_register(irn, reg);
(void) pset_hinsert_ptr(alloc_env->pre_colored, irn);
if (irn != NULL) {
arch_set_irn_register(irn, reg);
(void) pset_hinsert_ptr(alloc_env->pre_colored, irn);
@@
-363,7
+358,7
@@
static ir_node *handle_constraints(be_chordal_alloc_env_t *alloc_env,
DBG((dbg, LEVEL_2, "\tchecking reg of %+F: %s\n", proj, reg ? reg->name : "<none>"));
if (reg == NULL) {
DBG((dbg, LEVEL_2, "\tchecking reg of %+F: %s\n", proj, reg ? reg->name : "<none>"));
if (reg == NULL) {
- col = get_next_free_reg(alloc_env, bs);
+
size_t const
col = get_next_free_reg(alloc_env, bs);
reg = arch_register_for_index(env->cls, col);
bitset_set(bs, reg->index);
arch_set_irn_register(proj, reg);
reg = arch_register_for_index(env->cls, col);
bitset_set(bs, reg->index);
arch_set_irn_register(proj, reg);
@@
-409,10
+404,6
@@
static void assign(ir_node *block, void *env_ptr)
struct list_head *head = get_block_border_head(env, block);
be_lv_t *lv = be_get_irg_liveness(env->irg);
struct list_head *head = get_block_border_head(env, block);
be_lv_t *lv = be_get_irg_liveness(env->irg);
- const ir_node *irn;
- border_t *b;
- int idx;
-
bitset_clear_all(colors);
bitset_clear_all(live);
bitset_clear_all(in_colors);
bitset_clear_all(colors);
bitset_clear_all(live);
bitset_clear_all(in_colors);
@@
-429,8
+420,7
@@
static void assign(ir_node *block, void *env_ptr)
* Since their colors have already been assigned (The dominators were
* allocated before), we have to mark their colors as used also.
*/
* Since their colors have already been assigned (The dominators were
* allocated before), we have to mark their colors as used also.
*/
- be_lv_foreach(lv, block, be_lv_state_in, idx) {
- irn = be_lv_get_irn(lv, block, idx);
+ be_lv_foreach(lv, block, be_lv_state_in, irn) {
if (has_reg_class(env, irn)) {
const arch_register_t *reg = arch_get_irn_register(irn);
int col;
if (has_reg_class(env, irn)) {
const arch_register_t *reg = arch_get_irn_register(irn);
int col;
@@
-503,16
+493,12
@@
void be_ra_chordal_color(be_chordal_env_t *chordal_env)
{
be_chordal_alloc_env_t env;
char buf[256];
{
be_chordal_alloc_env_t env;
char buf[256];
- be_lv_t *lv;
const arch_register_class_t *cls = chordal_env->cls;
const arch_register_class_t *cls = chordal_env->cls;
- int colors_n = arch_register_class_n_regs(cls);
- ir_graph *irg = chordal_env->irg;
-
- lv = be_assure_liveness(irg);
- be_liveness_assure_sets(lv);
- be_liveness_assure_chk(lv);
+ int colors_n = arch_register_class_n_regs(cls);
+ ir_graph *irg = chordal_env->irg;
+ be_assure_live_sets(irg);
assure_doms(irg);
env.chordal_env = chordal_env;
assure_doms(irg);
env.chordal_env = chordal_env;
@@
-522,6
+508,15
@@
void be_ra_chordal_color(be_chordal_env_t *chordal_env)
env.in_colors = bitset_alloca(colors_n);
env.pre_colored = pset_new_ptr_default();
env.in_colors = bitset_alloca(colors_n);
env.pre_colored = pset_new_ptr_default();
+ be_timer_push(T_SPLIT);
+
+ if (chordal_env->opts->dump_flags & BE_CH_DUMP_SPLIT) {
+ snprintf(buf, sizeof(buf), "%s-split", chordal_env->cls->name);
+ dump_ir_graph(chordal_env->irg, buf);
+ }
+
+ be_timer_pop(T_SPLIT);
+
be_timer_push(T_CONSTR);
/* Handle register targeting constraints */
be_timer_push(T_CONSTR);
/* Handle register targeting constraints */