ir_node *be_get_start_proj(ir_graph *const irg, be_start_info_t *const info) { if (!info->irn) { /* This is already the transformed start node. */ ir_node *const start = get_irg_start(irg); arch_register_class_t const *const cls = arch_get_irn_register_req_out(start, info->pos)->cls; info->irn = new_r_Proj(start, cls ? cls->mode : mode_M, info->pos); } return info->irn; }
static unsigned get_start_reg_index(ir_graph *irg, const arch_register_t *reg) { /* do a naive linear search... */ ir_node *start = get_irg_start(irg); be_foreach_out(start, i) { arch_register_req_t const *const out_req = arch_get_irn_register_req_out(start, i); if (out_req->limited == NULL) continue; if (out_req->cls != reg->cls) continue; if (!rbitset_is_set(out_req->limited, reg->index)) continue; return i; }