Commit fc890737 authored by Michael Beck's avatar Michael Beck
Browse files

_value_strictly_dominates() implemented

[r14687]
parent 148d07bf
......@@ -33,6 +33,20 @@ static INLINE int _value_dominates_intrablock(const ir_node *a, const ir_node *b
return as <= bs;
}
/**
* Check strict dominance of two nodes in the same block.
* @param a The first node.
* @param b The second node.
* @return 1 if a comes before b in the same block, 0 else.
*/
static INLINE int _value_strictly_dominates_intrablock(const ir_node *a, const ir_node *b)
{
/* TODO: ? : can be removed?! */
sched_timestep_t as = is_Phi(a) ? 0 : sched_get_time_step(a);
sched_timestep_t bs = is_Phi(b) ? 0 : sched_get_time_step(b);
return as < bs;
}
/**
* Check, if one value dominates the other.
* The dominance is not strict here.
......@@ -59,6 +73,32 @@ static INLINE int _value_dominates(const ir_node *a, const ir_node *b)
return _value_dominates_intrablock(a, b);
}
/**
* Check, if one value dominates the other.
* The dominance is strict here.
* @param a The first node.
* @param b The second node.
* @return 1 if a dominates b, 0 else.
*/
static INLINE int _value_strictly_dominates(const ir_node *a, const ir_node *b)
{
const ir_node *block_a = get_block(a);
const ir_node *block_b = get_block(b);
/*
* a and b are not in the same block,
* so dominance is determined by the dominance of the blocks.
*/
if(block_a != block_b) {
return block_dominates(block_a, block_b);
}
/*
* Dominance is determined by the time steps of the schedule.
*/
return _value_strictly_dominates_intrablock(a, b);
}
/**
* Check, if two values interfere.
* @param lv Liveness information (in the future we should use a be_irg_t here).
......@@ -108,7 +148,7 @@ static INLINE int _lv_values_interfere(const be_lv_t *lv, const ir_node *a, cons
*/
foreach_out_edge(a, edge) {
const ir_node *user = get_edge_src_irn(edge);
if(get_nodes_block(user) == bb && !is_Phi(user) && b != user && _value_dominates(b, user))
if(get_nodes_block(user) == bb && !is_Phi(user) && _value_strictly_dominates(b, user))
return 1;
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment