* @brief Methods to compute when a value will be used again.
* @author Sebastian Hack, Matthias Braun
* @date 27.06.2005
- * @version $Id$
*/
#include "config.h"
#include "irgraph_t.h"
#include "iredges_t.h"
#include "irdom_t.h"
+#include "util.h"
#include "be_t.h"
#include "beutil.h"
const ir_node *block,
const ir_node *def)
{
- unsigned hash = HASH_COMBINE(hash_irn(block), hash_irn(def));
+ unsigned hash = hash_combine(hash_irn(block), hash_irn(def));
be_use_t temp;
be_use_t* result;
temp.block = block;
temp.node = def;
- result = (be_use_t*)set_find(env->uses, &temp, sizeof(temp), hash);
+ result = set_find(be_use_t, env->uses, &temp, sizeof(temp), hash);
if (result == NULL) {
// insert templ first as we might end in a loop in the get_next_use
temp.next_use = USES_INFINITY;
temp.outermost_loop = UNKNOWN_OUTERMOST_LOOP;
temp.visited = 0;
- result = (be_use_t*)set_insert(env->uses, &temp, sizeof(temp), hash);
+ result = set_insert(be_use_t, env->uses, &temp, sizeof(temp), hash);
}
if (result->outermost_loop == UNKNOWN_OUTERMOST_LOOP && result->visited < env->visited_counter) {
*/
static int be_is_phi_argument(const ir_node *block, const ir_node *def)
{
- ir_node *node;
- ir_node *succ_block = NULL;
- int arity, i;
-
#if 1
if (get_irn_n_edges_kind(block, EDGE_KIND_BLOCK) < 1)
#else
#endif
return 0;
- succ_block = get_first_block_succ(block);
+ ir_node *const succ_block = get_first_block_succ(block);
- arity = get_Block_n_cfgpreds(succ_block);
- if (arity <= 1) {
+ if (get_Block_n_cfgpreds(succ_block) <= 1) {
/* no Phis in the successor */
return 0;
}
/* find the index of block in its successor */
- for (i = 0; i < arity; ++i) {
- if (get_Block_cfgpred_block(succ_block, i) == block)
- break;
- }
- assert(i < arity);
+ int const i = get_Block_cfgpred_pos(succ_block, block);
+ assert(i >= 0);
/* iterate over the Phi nodes in the successor and check if def is
* one of its arguments */
ir_node *node;
unsigned timestep;
unsigned next_use_step;
- const ir_edge_t *edge;
assert(skip_from_uses == 0 || skip_from_uses == 1);
if (skip_from_uses) {
next_use_step = INT_MAX;
timestep = get_step(from);
foreach_out_edge(def, edge) {
- node = get_edge_src_irn(edge);
unsigned node_step;
+ node = get_edge_src_irn(edge);
if (is_Anchor(node))
continue;
*/
static void set_sched_step_walker(ir_node *block, void *data)
{
- ir_node *node;
unsigned step = 0;
(void) data;
{
be_uses_t *env = XMALLOC(be_uses_t);
- edges_assure(irg);
+ assure_edges(irg);
//set_using_irn_link(irg);