- next_use = USES_INFINITY;
- foreach_block_succ(bl, succ_edge) {
- const ir_node *succ_bl = succ_edge->src;
- if(is_live_in(succ_bl, def) || (get_irn_arity(succ_bl) > 1 && is_live_end(bl, def))) {
- unsigned next = get_next_use_bl(uses, succ_bl, def);
+ if(be_is_live_end(uses->lv, block, def))
+ return step;
+
+#ifdef SCAN_INTERBLOCK_USES
+ {
+ double best_execfreq = -1;
+ unsigned next_use = USES_INFINITY;
+
+ foreach_block_succ(block, edge) {
+ const be_use_t *use;
+ const ir_node *succ_block = get_edge_src_irn(edge);
+ double execfreq = get_block_execfreq(uses->execfreqs, succ_block);
+
+ //execfreq_sum += execfreq;
+
+ if(execfreq > best_execfreq) {
+ best_execfreq = execfreq;
+
+ if(!be_is_live_in(uses->lv, succ_block, def)) {
+ next_use = USES_INFINITY;
+ continue;
+ }
+
+ use = get_or_set_use_block(uses, succ_block, def);
+ //if(USES_IS_INFINITE(use->next_use))
+ // continue;
+
+ next_use = use->next_use;
+ }