+ next_use = NULL;
+ next_use_step = INT_MAX;
+ timestep = get_step(from);
+ foreach_out_edge(def, edge) {
+ ir_node *node = get_edge_src_irn(edge);
+ unsigned node_step;
+
+ if(is_Anchor(node))
+ continue;
+ if(get_nodes_block(node) != block)
+ continue;
+ if(is_Phi(node))
+ continue;
+
+ node_step = get_step(node);
+ if(node_step < timestep)
+ continue;
+ if(node_step < next_use_step) {
+ next_use = node;
+ next_use_step = node_step;
+ }
+ }
+
+ if(next_use != NULL) {
+ be_next_use_t result;
+ result.time = next_use_step - timestep + skip_from_uses;
+ result.outermost_loop = get_loop_depth(get_irn_loop(block));
+ result.before = next_use;
+ return result;
+ }
+
+ node = sched_last(block);
+ step = get_step(node) + 1 + timestep + skip_from_uses;
+
+#else
+ if(skip_from_uses) {
+ from = sched_next(from);
+ ++step;
+ }
+