*/
const arch_register_req_t *arch_get_register_req(const ir_node *irn, int pos);
+#define arch_get_register_req_out(irn) arch_get_register_req(irn, -1)
+
/**
* Get the number of allocatable registers concerning
* a register class for an operand of a node.
bitset_flip_all(free_cols);
/* Exclude colors not assignable to the irn */
- req = arch_get_register_req(irn, -1);
+ req = arch_get_register_req_out(irn);
if (arch_register_req_is(req, limited)) {
bitset_t *limited = bitset_alloca(cls->n_regs);
rbitset_copy_to_bitset(req->limited, limited);
if(ci->adm_cache == NULL) {
const arch_register_req_t *req;
ci->adm_cache = bitset_obstack_alloc(phase_obst(&env->ph), env->n_regs);
- req = arch_get_register_req(ci->irn, BE_OUT_POS(0));
+ req = arch_get_register_req_out(ci->irn);
if(arch_register_req_is(req, limited)) {
int i, n;
static void incur_constraint_costs(co2_t *env, const ir_node *irn, col_cost_pair_t *col_costs, int costs)
{
- const arch_register_req_t *req;
-
- req = arch_get_register_req(irn, BE_OUT_POS(0));
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
if (arch_register_req_is(req, limited)) {
unsigned n_regs = env->co->cls->n_regs;
static const char *get_dot_shape_name(co2_irn_t *ci)
{
- const arch_register_req_t *req;
+ const arch_register_req_t *req = arch_get_register_req_out(ci->irn);
- req = arch_get_register_req(ci->irn, BE_OUT_POS(0));
if(arch_register_req_is(req, limited))
return "diamond";
res->adm_colors = bitset_obstack_alloc(phase_obst(ph), env->n_regs);
/* Exclude colors not assignable to the irn */
- req = arch_get_register_req(irn, -1);
+ req = arch_get_register_req_out(irn);
if (arch_register_req_is(req, limited))
rbitset_copy_to_bitset(req->limited, res->adm_colors);
else
while (redo) {
redo = 0;
be_ifg_foreach_node(ifg, iter, irn) {
- const arch_register_req_t *req = arch_get_register_req(irn, -1);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
if (!arch_register_req_is(req, limited) && !sr_is_removed(sr, irn) && !co_gs_is_optimizable(sr->co, irn)) {
if (sr_is_simplicial(sr, irn)) {
pmap_insert(lenv->nr_2_irn, INT_TO_PTR(node_nr), irn);
- req = arch_get_register_req(irn, -1);
+ req = arch_get_register_req_out(irn);
bitset_clear_all(colors);
if (is_Reg_Phi(irn) || is_Perm_Proj(irn))
return 1;
- req = arch_get_register_req(irn, -1);
+ req = arch_get_register_req_out(irn);
if (is_2addr_code(req))
return 1;
static void co_collect_units(ir_node *irn, void *env)
{
- const arch_register_req_t *req = arch_get_register_req(irn, -1);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
copy_opt_t *co = env;
unit_t *unit;
/* Units with constraints come first */
u1_has_constr = 0;
for (i=0; i<u1->node_count; ++i) {
- arch_get_register_req(&req, u1->nodes[i], -1);
+ arch_get_register_req_out(&req, u1->nodes[i]);
if (arch_register_req_is(&req, limited)) {
u1_has_constr = 1;
break;
u2_has_constr = 0;
for (i=0; i<u2->node_count; ++i) {
- arch_get_register_req(&req, u2->nodes[i], -1);
+ arch_get_register_req_out(&req, u2->nodes[i]);
if (arch_register_req_is(&req, limited)) {
u2_has_constr = 1;
break;
}
static void build_graph_walker(ir_node *irn, void *env) {
- const arch_register_req_t *req = arch_get_register_req(irn, -1);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
copy_opt_t *co = env;
int pos, max;
const arch_register_t *reg;
{
ir_node *nodes[] = { a, b };
bitset_t *constr[] = { NULL, NULL };
- const arch_register_req_t *req;
int j;
constr[0] = bitset_alloca(co->cls->n_regs);
constr[1] = bitset_alloca(co->cls->n_regs);
for (j = 0; j < 2; ++j) {
- req = arch_get_register_req(nodes[j], BE_OUT_POS(0));
+ const arch_register_req_t *req = arch_get_register_req_out(nodes[j]);
if(arch_register_req_is(req, limited))
rbitset_copy_to_bitset(req->limited, constr[j]);
else
be_ifg_foreach_node(ifg, it, irn) {
if (!arch_irn_is(irn, ignore)) {
- int idx = node_map[get_irn_idx(irn)];
- affinity_node_t *a = get_affinity_info(co, irn);
-
- const arch_register_req_t *req;
- ir_node *adj;
+ int idx = node_map[get_irn_idx(irn)];
+ affinity_node_t *a = get_affinity_info(co, irn);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
+ ir_node *adj;
- req = arch_get_register_req(irn, BE_OUT_POS(0));
if(arch_register_req_is(req, limited)) {
for(i = 0; i < co->cls->n_regs; ++i) {
if(!rbitset_is_set(req->limited, i) && color_map[i] >= 0)
static void ifg_dump_node_attr(FILE *f, void *self, ir_node *irn)
{
- co_ifg_dump_t *env = self;
- const arch_register_t *reg = arch_get_irn_register(irn);
- const arch_register_req_t *req;
- int limited;
-
- req = arch_get_register_req(irn, BE_OUT_POS(0));
- limited = arch_register_req_is(req, limited);
+ co_ifg_dump_t *env = self;
+ const arch_register_t *reg = arch_get_irn_register(irn);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
+ int limited = arch_register_req_is(req, limited);
if(env->flags & CO_IFG_DUMP_LABELS) {
ir_fprintf(f, "label=\"%+F", irn);
if (arch_irn_consider_in_reg_alloc(env->cls, p)) {
/* found a def: create a new operand */
- o.req = arch_get_register_req(p, -1);
+ o.req = arch_get_register_req_out(p);
o.carrier = p;
o.irn = irn;
o.pos = -(get_Proj_proj(p) + 1);
}
} else if (arch_irn_consider_in_reg_alloc(env->cls, irn)) {
/* only one def, create one operand */
- o.req = arch_get_register_req(irn, -1);
+ o.req = arch_get_register_req_out(irn);
o.carrier = irn;
o.irn = irn;
o.pos = -1;
* @param env the constraint environment
*/
static void assure_different_constraints(ir_node *irn, ir_node *skipped_irn, constraint_env_t *env) {
- const arch_register_req_t *req = arch_get_register_req(irn, -1);
+ const arch_register_req_t *req = arch_get_register_req_out(irn);
if (arch_register_req_is(req, must_be_different)) {
const unsigned other = req->other_different;
req = arch_get_register_req(get_Proj_pred(node),
-1 - get_Proj_proj(node));
} else {
- req = arch_get_register_req(node, -1);
+ req = arch_get_register_req_out(node);
}
if (req->type != arch_register_req_type_normal)
break;
/* Matze: don't we unnecessary constraint our phis with this?
* we only need to take the regclass IMO*/
if(!is_Phi(op))
- return arch_get_register_req(op, BE_OUT_POS(0));
+ return arch_get_register_req_out(op);
}
/*
} else if (proj == pn_be_Call_M_regular) {
proj = pn_ia32_Call_M;
} else {
- arch_register_req_t const *const req = arch_get_register_req(node, -1);
+ arch_register_req_t const *const req = arch_get_register_req_out(node);
int const n_outs = get_ia32_n_res(new_call);
int i;