+ foreach_block_succ(block, edge) {
+ succ_block = get_edge_src_irn(edge);
+ break;
+ }
+
+ arity = get_Block_n_cfgpreds(succ_block);
+ if(arity <= 1)
+ return 0;
+
+ for(i = 0; i < arity; ++i) {
+ if(get_Block_cfgpred_block(succ_block, i) == block)
+ break;
+ }
+ assert(i < arity);
+
+ sched_foreach(succ_block, node) {
+ ir_node *arg;
+
+ if(!is_Phi(node))
+ break;
+
+ arg = get_irn_n(node, i);
+ if(arg == def)
+ return 1;
+ }
+
+ return 0;
+}
+
+static inline
+unsigned get_step(const ir_node *node)
+{
+ return PTR_TO_INT(get_irn_link(node));
+}
+
+static be_next_use_t get_next_use(be_uses_t *env, ir_node *from,
+ unsigned from_step, const ir_node *def,
+ int skip_from_uses)
+{
+ unsigned step = from_step;
+ ir_node *block = get_nodes_block(from);
+ ir_node *next_use;
+ ir_node *node;
+ unsigned timestep;
+ unsigned next_use_step;
+ const ir_edge_t *edge;
+
+#if 1
+ assert(skip_from_uses == 0 || skip_from_uses == 1);