-
- pn = (int) get_Proj_proj(proj);
- pred = get_irn_n(irn, pn);
-
- rbitset_set(used, pn);
-
- /* We may need to reschedule be_Keeps to keep live-ranges short. */
- if (get_irn_n_edges(proj) == 1) {
- const ir_edge_t *proj_edge = get_irn_out_edge_first(proj);
- ir_node *proj_succ = get_edge_src_irn(proj_edge);
-
- if (be_is_Keep(proj_succ)) {
- int succ_arity = get_irn_arity(proj_succ);
-
- keep_alive_barrier_operand(block, irn, pn);
-
- /* Disconnect old be_Keep. */
- if (succ_arity > 1) {
- int edge_pos = get_edge_src_pos(proj_edge);
- int new_arity = succ_arity - 1;
- int pos;
- int new_pos = 0;
- ir_node **ins;
-
- NEW_ARR_A(ir_node *, ins, succ_arity);
- for (pos = 0; pos < succ_arity; ++pos) {
- if (pos != edge_pos)
- ins[new_pos++] = get_irn_n(proj_succ, pos);
- }
-
- set_irn_in(proj_succ, new_arity, ins);
- }
- else {
- sched_remove(proj_succ);
- kill_node(proj_succ);
- }
- }
- }
-
- edges_reroute_kind(proj, pred, EDGE_KIND_NORMAL, irg);
- edges_reroute_kind(proj, pred, EDGE_KIND_DEP, irg);
- }
-
- /* the barrier also had the effect of a Keep for unused inputs.
- * we now have to create an explicit Keep for them */
- n_used = rbitset_popcount(used, arity);
- if (n_used < (size_t) arity) {
- int i;
-
- for (i = 0; i < arity; ++i) {
- if (rbitset_is_set(used, i))
- continue;
-
- keep_alive_barrier_operand(block, irn, i);
+ const arch_register_req_t *in_req
+ = arch_get_irn_register_req_in(node, i);
+ for (unsigned o = 0; o < n_outs; ++o) {
+ const arch_register_t *outreg
+ = arch_get_irn_register_out(schedpoint, o);
+ const arch_register_req_t *outreq
+ = arch_get_irn_register_req_out(schedpoint, o);
+ if (overlapping_regs(reg, in_req, outreg, outreq))
+ return false;