* @date 06.12.2004
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
/* statev is expensive here, only enable when needed */
#define DISABLE_STATEV
/* Compute the inter block liveness for a graph. */
be_lv_t *be_liveness(const be_irg_t *birg)
{
- be_lv_t *lv = xmalloc(sizeof(lv[0]));
+ be_lv_t *lv = XMALLOCZ(be_lv_t);
- memset(lv, 0, sizeof(lv[0]));
lv->irg = be_get_birg_irg(birg);
lv->birg = birg;
#ifdef USE_LIVE_CHK
return !problem_found;
}
-void be_liveness_transfer(const arch_env_t *arch_env,
- const arch_register_class_t *cls,
+void be_liveness_transfer(const arch_register_class_t *cls,
ir_node *node, ir_nodeset_t *nodeset)
{
int i, arity;
foreach_out_edge(node, edge) {
ir_node *proj = get_edge_src_irn(edge);
- if (arch_irn_consider_in_reg_alloc(arch_env, cls, proj)) {
+ if (arch_irn_consider_in_reg_alloc(cls, proj)) {
ir_nodeset_remove(nodeset, proj);
}
}
- } else if (arch_irn_consider_in_reg_alloc(arch_env, cls, node)) {
+ } else if (arch_irn_consider_in_reg_alloc(cls, node)) {
ir_nodeset_remove(nodeset, node);
}
for (i = 0; i < arity; ++i) {
ir_node *op = get_irn_n(node, i);
- if (arch_irn_consider_in_reg_alloc(arch_env, cls, op))
+ if (arch_irn_consider_in_reg_alloc(cls, op))
ir_nodeset_insert(nodeset, op);
}
}
-void be_liveness_end_of_block(const be_lv_t *lv, const arch_env_t *arch_env,
+void be_liveness_end_of_block(const be_lv_t *lv,
const arch_register_class_t *cls,
const ir_node *block, ir_nodeset_t *live)
{
assert(lv->nodes && "live sets must be computed");
be_lv_foreach(lv, block, be_lv_state_end, i) {
ir_node *node = be_lv_get_irn(lv, block, i);
- if(!arch_irn_consider_in_reg_alloc(arch_env, cls, node))
+ if (!arch_irn_consider_in_reg_alloc(cls, node))
continue;
ir_nodeset_insert(live, node);
-void be_liveness_nodes_live_at(const be_lv_t *lv, const arch_env_t *arch_env,
+void be_liveness_nodes_live_at(const be_lv_t *lv,
const arch_register_class_t *cls,
const ir_node *pos, ir_nodeset_t *live)
{
const ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos);
ir_node *irn;
- be_liveness_end_of_block(lv, arch_env, cls, bl, live);
+ be_liveness_end_of_block(lv, cls, bl, live);
sched_foreach_reverse(bl, irn) {
/*
* If we encounter the node we want to insert the Perm after,
if(irn == pos)
return;
- be_liveness_transfer(arch_env, cls, irn, live);
- }
-}
-
-void be_liveness_nodes_live_at_input(const be_lv_t *lv,
- const arch_env_t *arch_env,
- const arch_register_class_t *cls,
- const ir_node *pos, ir_nodeset_t *live)
-{
- const ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos);
- ir_node *irn;
-
- assert(lv->nodes && "live sets must be computed");
- be_liveness_end_of_block(lv, arch_env, cls, bl, live);
- sched_foreach_reverse(bl, irn) {
- be_liveness_transfer(arch_env, cls, irn, live);
- if(irn == pos)
- return;
+ be_liveness_transfer(cls, irn, live);
}
}