big refactoring of arch_XXX functions
authorMatthias Braun <matze@braunis.de>
Mon, 15 Aug 2011 11:41:11 +0000 (13:41 +0200)
committerMatthias Braun <matze@braunis.de>
Mon, 15 Aug 2011 12:03:03 +0000 (14:03 +0200)
This tries to get the names in a consistent format. We basically have 2
views on register allocation/constraints now:

1) Register Requirements and Assigments are per-instruction. Each
   instruction has requirements on its inputs and outputs, register get
   assigned for outputs of an instruction (assignment is an attribute of
   an instruction, not of the Proj-nodes).
   The internal datastructures model this form!

   The functions here have the form:
     arch_get_irn_register_req_in(node, input_nr)
     arch_get_irn_register_in(node, input_nr)
     arch_get_irn_register_req_out(node, output_nr)
     arch_set_irn_register_out(node, output_nr, register)

2) Register Requirements and Assignments are on firm-values. This view
   allows to query/assign requirements and registers at the Proj nodes
   instead of the repsective predecessors.
   This is a convenience interface modeled on top of the other!

   The functions have the form:
     arch_get_irn_register_req(node)
     arch_get_irn_register(node)
     arch_set_irn_register(node, register)

54 files changed:
ir/be/TEMPLATE/TEMPLATE_emitter.c
ir/be/TEMPLATE/TEMPLATE_new_nodes.c
ir/be/TEMPLATE/TEMPLATE_transform.c
ir/be/amd64/amd64_emitter.c
ir/be/amd64/amd64_new_nodes.c
ir/be/amd64/amd64_spec.pl
ir/be/amd64/amd64_transform.c
ir/be/arm/arm_emitter.c
ir/be/arm/arm_new_nodes.c
ir/be/arm/arm_spec.pl
ir/be/arm/arm_transform.c
ir/be/beabi.c
ir/be/beabihelper.c
ir/be/bearch.c
ir/be/bearch.h
ir/be/becopyheur.c
ir/be/becopyheur2.c
ir/be/becopyheur4.c
ir/be/becopyilp.c
ir/be/becopyilp2.c
ir/be/becopyopt.c
ir/be/beflags.c
ir/be/beifg.c
ir/be/beinfo.c
ir/be/beinsn.c
ir/be/beirgmod.c
ir/be/belistsched.c
ir/be/belower.c
ir/be/benode.c
ir/be/bepbqpcoloring.c
ir/be/beprefalloc.c
ir/be/beschednormal.c
ir/be/beschedregpress.c
ir/be/bespill.c
ir/be/bespillbelady.c
ir/be/bespilldaemel.c
ir/be/bessaconstr.c
ir/be/bessadestr.c
ir/be/bestack.c
ir/be/beverify.c
ir/be/ia32/bearch_ia32.c
ir/be/ia32/ia32_common_transform.c
ir/be/ia32/ia32_emitter.c
ir/be/ia32/ia32_finish.c
ir/be/ia32/ia32_new_nodes.c
ir/be/ia32/ia32_optimize.c
ir/be/ia32/ia32_spec.pl
ir/be/ia32/ia32_transform.c
ir/be/ia32/ia32_x87.c
ir/be/sparc/bearch_sparc.c
ir/be/sparc/sparc_finish.c
ir/be/sparc/sparc_new_nodes.c
ir/be/sparc/sparc_spec.pl
ir/be/sparc/sparc_transform.c

index 8401bbd..ecce106 100644 (file)
 
 #define SNPRINTF_BUF_LEN 128
 
-/**
- * Returns the register at in position pos.
- */
-static const arch_register_t *get_in_reg(const ir_node *node, int pos)
-{
-       ir_node *op = get_irn_n(node, pos);
-       return arch_get_irn_register(op);
-}
-
 void TEMPLATE_emit_immediate(const ir_node *node)
 {
        const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node);
@@ -71,13 +62,13 @@ static void emit_register(const arch_register_t *reg)
 
 void TEMPLATE_emit_source_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = get_in_reg(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_in(node, pos);
        emit_register(reg);
 }
 
 void TEMPLATE_emit_dest_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = arch_irn_get_register(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_out(node, pos);
        emit_register(reg);
 }
 
index f3f29ac..78faac3 100644 (file)
@@ -107,8 +107,8 @@ static void init_TEMPLATE_attributes(ir_node *node, arch_irn_flags_t flags,
        backend_info_t  *info;
        (void) execution_units;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
 
        info            = be_get_info(node);
        info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res);
index 4426fb0..f04aa42 100644 (file)
@@ -247,7 +247,7 @@ static ir_node *gen_Phi(ir_node *node)
        copy_node_attr(irg, node, phi);
        be_duplicate_deps(node, phi);
 
-       arch_set_out_register_req(phi, 0, req);
+       arch_set_irn_register_req_out(phi, 0, req);
        be_enqueue_preds(node);
        return phi;
 }
index 897a900..5d96e1f 100644 (file)
 
 #include "../benode.h"
 
-/**
- * Returns the register at in position pos.
- */
-static const arch_register_t *get_in_reg(const ir_node *node, int pos)
-{
-       ir_node *op = get_irn_n(node, pos);
-       return arch_get_irn_register(op);
-}
-
 /*************************************************************
  *             _       _    __   _          _
  *            (_)     | |  / _| | |        | |
@@ -93,12 +84,12 @@ void amd64_emit_fp_offset(const ir_node *node)
 
 void amd64_emit_source_register(const ir_node *node, int pos)
 {
-       amd64_emit_register(get_in_reg(node, pos));
+       amd64_emit_register(arch_get_irn_register_in(node, pos));
 }
 
 void amd64_emit_dest_register(const ir_node *node, int pos)
 {
-       amd64_emit_register(arch_irn_get_register(node, pos));
+       amd64_emit_register(arch_get_irn_register_out(node, pos));
 }
 
 /**
@@ -332,7 +323,7 @@ static void emit_be_Copy(const ir_node *irn)
 {
        ir_mode *mode = get_irn_mode(irn);
 
-       if (get_in_reg(irn, 0) == arch_irn_get_register(irn, 0)) {
+       if (arch_get_irn_register_in(irn, 0) == arch_get_irn_register_out(irn, 0)) {
                /* omitted Copy */
                return;
        }
@@ -454,9 +445,9 @@ static void emit_amd64_binop_op(const ir_node *irn, int second_op)
  */
 static void emit_amd64_binop(const ir_node *irn)
 {
-       const arch_register_t *reg_s1 = get_in_reg(irn, 0);
-       const arch_register_t *reg_s2 = get_in_reg(irn, 1);
-       const arch_register_t *reg_d1 = arch_irn_get_register(irn, 0);
+       const arch_register_t *reg_s1 = arch_get_irn_register_in(irn, 0);
+       const arch_register_t *reg_s2 = arch_get_irn_register_in(irn, 1);
+       const arch_register_t *reg_d1 = arch_get_irn_register_out(irn, 0);
 
        int second_op = 0;
 
index f26b622..5707b57 100644 (file)
@@ -129,8 +129,8 @@ static void init_amd64_attributes(ir_node *node, arch_irn_flags_t flags,
        backend_info_t  *info;
        (void) execution_units;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
 
        info            = be_get_info(node);
        info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res);
index 107f038..87b685b 100644 (file)
@@ -116,7 +116,7 @@ sub amd64_custom_init_attr {
        my $res    = "";
 
        if(defined($node->{modified_flags})) {
-               $res .= "\tarch_irn_add_flags(res, arch_irn_flags_modify_flags);\n";
+               $res .= "\tarch_add_irn_flags(res, arch_irn_flags_modify_flags);\n";
        }
        return $res;
 }
index 9ba3d06..fe36e1e 100644 (file)
@@ -180,7 +180,7 @@ static ir_node *gen_Jmp(ir_node *node)
 static ir_node *gen_be_Call(ir_node *node)
 {
        ir_node *res = be_duplicate_node(node);
-       arch_irn_add_flags(res, arch_irn_flags_modify_flags);
+       arch_add_irn_flags(res, arch_irn_flags_modify_flags);
 
        return res;
 }
@@ -330,7 +330,7 @@ static ir_node *gen_Phi(ir_node *node)
        copy_node_attr(irg, node, phi);
        be_duplicate_deps(node, phi);
 
-       arch_set_out_register_req(phi, 0, req);
+       arch_set_irn_register_req_out(phi, 0, req);
 
        be_enqueue_preds(node);
 
index 0ed9480..4f13e55 100644 (file)
@@ -65,15 +65,6 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
 static set       *sym_or_tv;
 static arm_isa_t *isa;
 
-/**
- * Returns the register at in position pos.
- */
-static const arch_register_t *get_in_reg(const ir_node *irn, int pos)
-{
-       ir_node *op = get_irn_n(irn, pos);
-       return arch_get_irn_register(op);
-}
-
 static void arm_emit_register(const arch_register_t *reg)
 {
        be_emit_string(arch_register_get_name(reg));
@@ -81,13 +72,13 @@ static void arm_emit_register(const arch_register_t *reg)
 
 void arm_emit_source_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = get_in_reg(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_in(node, pos);
        arm_emit_register(reg);
 }
 
 void arm_emit_dest_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = arch_irn_get_register(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_out(node, pos);
        arm_emit_register(reg);
 }
 
@@ -450,16 +441,16 @@ static void emit_arm_CopyB(const ir_node *irn)
        const arm_CopyB_attr_t *attr = get_arm_CopyB_attr_const(irn);
        unsigned size = attr->size;
 
-       const char *tgt = arch_register_get_name(get_in_reg(irn, 0));
-       const char *src = arch_register_get_name(get_in_reg(irn, 1));
+       const char *tgt = arch_register_get_name(arch_get_irn_register_in(irn, 0));
+       const char *src = arch_register_get_name(arch_get_irn_register_in(irn, 1));
        const char *t0, *t1, *t2, *t3;
 
        const arch_register_t *tmpregs[4];
 
        /* collect the temporary registers and sort them, we need ascending order */
-       tmpregs[0] = get_in_reg(irn, 2);
-       tmpregs[1] = get_in_reg(irn, 3);
-       tmpregs[2] = get_in_reg(irn, 4);
+       tmpregs[0] = arch_get_irn_register_in(irn, 2);
+       tmpregs[1] = arch_get_irn_register_in(irn, 3);
+       tmpregs[2] = arch_get_irn_register_in(irn, 4);
        tmpregs[3] = &arm_registers[REG_R12];
 
        /* Note: R12 is always the last register because the RA did not assign higher ones */
@@ -691,7 +682,7 @@ static void emit_be_Copy(const ir_node *irn)
 {
        ir_mode *mode = get_irn_mode(irn);
 
-       if (get_in_reg(irn, 0) == arch_irn_get_register(irn, 0)) {
+       if (arch_get_irn_register_in(irn, 0) == arch_get_irn_register_out(irn, 0)) {
                /* omitted Copy */
                return;
        }
index c1af03c..ed580a3 100644 (file)
@@ -360,8 +360,8 @@ static void init_arm_attributes(ir_node *node, arch_irn_flags_t flags,
        backend_info_t *info;
        (void) execution_units;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
        attr->is_load_store    = false;
 
        info            = be_get_info(node);
index 2dc7368..306770e 100644 (file)
@@ -312,7 +312,7 @@ LinkMovPC => {
        attr_type    => "arm_shifter_operand_t",
        attr         => "arm_shift_modifier_t shift_modifier, unsigned char immediate_value, unsigned char immediate_rot",
        custominit   => "init_arm_shifter_operand(res, immediate_value, shift_modifier, immediate_rot);\n".
-                       "\tarch_irn_add_flags(res, arch_irn_flags_modify_flags);",
+                       "\tarch_add_irn_flags(res, arch_irn_flags_modify_flags);",
        emit         => ". mov lr, pc\n".
                        ". mov pc, %SO",
 },
@@ -325,7 +325,7 @@ LinkLdrPC => {
        out_arity    => "variable",
        attr_type    => "arm_load_store_attr_t",
        attr         => "ir_mode *ls_mode, ir_entity *entity, int entity_sign, long offset, bool is_frame_entity",
-       custominit   => "arch_irn_add_flags(res, arch_irn_flags_modify_flags);",
+       custominit   => "arch_add_irn_flags(res, arch_irn_flags_modify_flags);",
        emit         => ". mov lr, pc\n".
                        ". ldr pc, %SO",
 },
@@ -336,7 +336,7 @@ Bl => {
        out_arity  => "variable",
        attr_type  => "arm_SymConst_attr_t",
        attr       => "ir_entity *entity, int symconst_offset",
-       custominit => "arch_irn_add_flags(res, arch_irn_flags_modify_flags);",
+       custominit => "arch_add_irn_flags(res, arch_irn_flags_modify_flags);",
        emit       => '. bl %SC',
 },
 
index 87624b6..2c93a45 100644 (file)
@@ -1543,11 +1543,11 @@ static ir_node *gen_Proj_Proj_Start(ir_node *node)
  */
 static int find_out_for_reg(ir_node *node, const arch_register_t *reg)
 {
-       int n_outs = arch_irn_get_n_outs(node);
+       int n_outs = arch_get_irn_n_outs(node);
        int o;
 
        for (o = 0; o < n_outs; ++o) {
-               const arch_register_req_t *req = arch_get_out_register_req(node, o);
+               const arch_register_req_t *req = arch_get_irn_register_req_out(node, o);
                if (req == reg->single_req)
                        return o;
        }
@@ -2011,13 +2011,13 @@ static ir_node *gen_Call(ir_node *node)
                pmap_insert(node_to_stack, node, incsp);
        }
 
-       arch_set_in_register_reqs(res, in_req);
+       arch_set_irn_register_reqs_in(res, in_req);
 
        /* create output register reqs */
-       arch_set_out_register_req(res, 0, arch_no_register_req);
+       arch_set_irn_register_req_out(res, 0, arch_no_register_req);
        for (o = 0; o < n_caller_saves; ++o) {
                const arch_register_t *reg = caller_saves[o];
-               arch_set_out_register_req(res, o+1, reg->single_req);
+               arch_set_irn_register_req_out(res, o+1, reg->single_req);
        }
 
        /* copy pinned attribute */
@@ -2072,7 +2072,7 @@ static ir_node *gen_Phi(ir_node *node)
        copy_node_attr(irg, node, phi);
        be_duplicate_deps(node, phi);
 
-       arch_set_out_register_req(phi, 0, req);
+       arch_set_irn_register_req_out(phi, 0, req);
 
        be_enqueue_preds(node);
 
index 791839c..122cf68 100644 (file)
@@ -118,6 +118,32 @@ static void be_abi_reg_map_set(pmap *map, const arch_register_t* reg,
        pmap_insert(map, reg, node);
 }
 
+/**
+ * Check if the given register is callee save, ie. will be save by the callee.
+ */
+static bool arch_register_is_callee_save(
+       const arch_env_t      *arch_env,
+       const arch_register_t *reg)
+{
+       if (arch_env->impl->register_saved_by)
+               return arch_env->impl->register_saved_by(reg, /*callee=*/1);
+       return false;
+}
+
+/**
+ * Check if the given register is caller save, ie. must be save by the caller.
+ */
+static bool arch_register_is_caller_save(
+       const arch_env_t      *arch_env,
+       const arch_register_t *reg)
+{
+       if (arch_env->impl->register_saved_by)
+               return arch_env->impl->register_saved_by(reg, /*callee=*/0);
+       return false;
+}
+
+
+
 /*
      _    ____ ___    ____      _ _ _                _
     / \  | __ )_ _|  / ___|__ _| | | |__   __ _  ___| | _____
@@ -581,8 +607,8 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp)
        /* add state registers ins */
        for (s = 0; s < ARR_LEN(states); ++s) {
                const arch_register_t       *reg = states[s];
-               const arch_register_class_t *cls = arch_register_get_class(reg);
-               ir_node *regnode = new_r_Unknown(irg, arch_register_class_mode(cls));
+               const arch_register_class_t *cls = reg->reg_class;
+               ir_node *regnode = new_r_Unknown(irg, cls->mode);
                in[n_ins++]      = regnode;
        }
        assert(n_ins == (int) (n_reg_params + ARR_LEN(states)));
@@ -732,7 +758,7 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp)
                keep = be_new_Keep(bl, n, in);
                for (i = 0; i < n; ++i) {
                        const arch_register_t *reg = (const arch_register_t*)get_irn_link(in[i]);
-                       be_node_set_reg_class_in(keep, i, reg->reg_class);
+                       be_node_set_reg_class_in(keep, i, arch_register_get_class(reg));
                }
        }
 
@@ -1569,7 +1595,7 @@ static void modify_irg(ir_graph *irg)
 
        /* create a new initial memory proj */
        assert(is_Proj(old_mem));
-       arch_set_out_register_req(env->start, 0, arch_no_register_req);
+       arch_set_irn_register_req_out(env->start, 0, arch_no_register_req);
        new_mem_proj = new_r_Proj(env->start, mode_M, 0);
        mem = new_mem_proj;
        set_irg_initial_mem(irg, mem);
index e6b8354..4e317a5 100644 (file)
@@ -274,12 +274,12 @@ ir_node *be_prolog_create_start(beabi_helper_env_t *env, dbg_info *dbgi,
                const arch_register_t *reg     = regflag->reg;
                ir_node               *proj;
                if (reg == NULL) {
-                       arch_set_out_register_req(start, o, arch_no_register_req);
+                       arch_set_irn_register_req_out(start, o, arch_no_register_req);
                        proj = new_r_Proj(start, mode_M, o);
                } else {
                        be_set_constr_single_reg_out(start, o, regflag->reg,
                                                     regflag->flags);
-                       arch_irn_set_register(start, o, regflag->reg);
+                       arch_set_irn_register_out(start, o, regflag->reg);
                        proj = new_r_Proj(start, reg->reg_class->mode, o);
                }
                env->prolog.value_map[o] = proj;
@@ -422,7 +422,7 @@ static void add_missing_keep_walker(ir_node *node, void *data)
        (void) data;
        if (mode != mode_T) {
                if (!has_real_user(node)) {
-                       const arch_register_req_t   *req = arch_get_register_req_out(node);
+                       const arch_register_req_t   *req = arch_get_irn_register_req(node);
                        const arch_register_class_t *cls = req->cls;
                        if (cls == NULL
                                        || (cls->flags & arch_register_class_flag_manual_ra)) {
@@ -434,7 +434,7 @@ static void add_missing_keep_walker(ir_node *node, void *data)
                return;
        }
 
-       n_outs = arch_irn_get_n_outs(node);
+       n_outs = arch_get_irn_n_outs(node);
        if (n_outs <= 0)
                return;
 
@@ -470,7 +470,7 @@ static void add_missing_keep_walker(ir_node *node, void *data)
                        continue;
                }
 
-               req = arch_get_out_register_req(node, i);
+               req = arch_get_irn_register_req_out(node, i);
                cls = req->cls;
                if (cls == NULL || (cls->flags & arch_register_class_flag_manual_ra)) {
                        continue;
index c0c6a36..3172eff 100644 (file)
 
 #include "irprintf.h"
 
+static const arch_register_req_t no_requirement = {
+       arch_register_req_type_none,
+       NULL,
+       NULL,
+       0,
+       0,
+       0
+};
+const arch_register_req_t *arch_no_register_req = &no_requirement;
+
+static reg_out_info_t dummy_info = {
+       NULL,
+       &no_requirement
+};
+
 /* Initialize the architecture environment struct. */
 arch_env_t *arch_env_init(const arch_isa_if_t *isa_if, FILE *file_handle, be_main_env_t *main_env)
 {
@@ -53,7 +68,7 @@ arch_env_t *arch_env_init(const arch_isa_if_t *isa_if, FILE *file_handle, be_mai
  * @param irn The node to get the responsible isa for.
  * @return The irn operations given by the responsible isa.
  */
-static inline const arch_irn_ops_t *get_irn_ops(const ir_node *irn)
+static const arch_irn_ops_t *get_irn_ops(const ir_node *irn)
 {
        const ir_op          *ops;
        const arch_irn_ops_t *be_ops;
@@ -69,22 +84,6 @@ static inline const arch_irn_ops_t *get_irn_ops(const ir_node *irn)
        return be_ops;
 }
 
-const arch_register_req_t *arch_get_register_req(const ir_node *irn, int pos)
-{
-       if (is_Proj(irn)) {
-               ir_node *pred = get_Proj_pred(irn);
-               long     pn   = get_Proj_proj(irn);
-               assert(pos == -1);
-               return arch_get_out_register_req(pred, pn);
-       }
-
-       if (pos < 0) {
-               return arch_get_out_register_req(irn, -pos-1);
-       } else {
-               return arch_get_in_register_req(irn, pos);
-       }
-}
-
 void arch_set_frame_offset(ir_node *irn, int offset)
 {
        const arch_irn_ops_t *ops = get_irn_ops(irn);
@@ -147,37 +146,10 @@ int arch_get_op_estimated_cost(const ir_node *irn)
        }
 }
 
-int arch_reg_is_allocatable(const ir_node *irn, int pos,
-                            const arch_register_t *reg)
-{
-       const arch_register_req_t *req = arch_get_register_req(irn, pos);
-
-       if (req->type == arch_register_req_type_none)
-               return 0;
-
-       if (arch_register_req_is(req, limited)) {
-               if (arch_register_get_class(reg) != req->cls)
-                       return 0;
-               return rbitset_is_set(req->limited, arch_register_get_index(reg));
-       }
-
-       return req->cls == reg->reg_class;
-}
-
-const arch_register_class_t *arch_get_irn_reg_class(const ir_node *irn, int pos)
+static reg_out_info_t *get_out_info(const ir_node *node)
 {
-       const arch_register_req_t *req = arch_get_register_req(irn, pos);
-
-       assert(req->type != arch_register_req_type_none || req->cls == NULL);
-
-       return req->cls;
-}
-
-static inline reg_out_info_t *get_out_info(const ir_node *node)
-{
-       size_t                pos  = 0;
+       size_t                pos = 0;
        const backend_info_t *info;
-
        assert(get_irn_mode(node) != mode_T);
        if (is_Proj(node)) {
                pos  = get_Proj_proj(node);
@@ -185,12 +157,17 @@ static inline reg_out_info_t *get_out_info(const ir_node *node)
        }
 
        info = be_get_info(node);
+       /* We have a problem with the switch-node where there can be arbitrary
+        * Proj-numbers, so we can't easily allocate an array big-enough to hold
+        * all of them. So until we rewrite Switch-nodes we need this special case
+        */
+       if (info->out_infos == NULL)
+               return &dummy_info;
        assert(pos < ARR_LEN(info->out_infos));
        return &info->out_infos[pos];
 }
 
-
-static inline reg_out_info_t *get_out_info_n(const ir_node *node, int pos)
+static reg_out_info_t *get_out_info_n(const ir_node *node, int pos)
 {
        const backend_info_t *info = be_get_info(node);
        assert(!is_Proj(node));
@@ -205,13 +182,20 @@ const arch_register_t *arch_get_irn_register(const ir_node *node)
        return out->reg;
 }
 
-const arch_register_t *arch_irn_get_register(const ir_node *node, int pos)
+const arch_register_t *arch_get_irn_register_out(const ir_node *node, int pos)
 {
        const reg_out_info_t *out = get_out_info_n(node, pos);
        return out->reg;
 }
 
-void arch_irn_set_register(ir_node *node, int pos, const arch_register_t *reg)
+const arch_register_t *arch_get_irn_register_in(const ir_node *node, int pos)
+{
+       ir_node *op = get_irn_n(node, pos);
+       return arch_get_irn_register(op);
+}
+
+void arch_set_irn_register_out(ir_node *node, int pos,
+                               const arch_register_t *reg)
 {
        reg_out_info_t *out = get_out_info_n(node, pos);
        out->reg            = reg;
@@ -223,30 +207,63 @@ void arch_set_irn_register(ir_node *node, const arch_register_t *reg)
        out->reg = reg;
 }
 
+const arch_register_req_t *arch_get_irn_register_req(const ir_node *node)
+{
+       reg_out_info_t *out = get_out_info(node);
+       return out->req;
+}
+
 arch_irn_class_t arch_irn_classify(const ir_node *node)
 {
        const arch_irn_ops_t *ops = get_irn_ops(node);
        return ops->classify(node);
 }
 
-arch_irn_flags_t arch_irn_get_flags(const ir_node *node)
+arch_irn_flags_t arch_get_irn_flags(const ir_node *node)
 {
-       backend_info_t *info = be_get_info(node);
+       backend_info_t *info;
+       if (is_Proj(node))
+               return arch_irn_flags_not_scheduled;
+
+       info = be_get_info(node);
        return info->flags;
 }
 
-void arch_irn_set_flags(ir_node *node, arch_irn_flags_t flags)
+void arch_set_irn_flags(ir_node *node, arch_irn_flags_t flags)
 {
-       backend_info_t *info = be_get_info(node);
+       backend_info_t *info;
+
+       /* setting flags is only supported for instructions currently.
+        * (mainly because we found no use for it yet and saved the space for
+        * be_infos for them */
+       assert(!is_Proj(node));
+       info = be_get_info(node);
        info->flags = flags;
 }
 
-void arch_irn_add_flags(ir_node *node, arch_irn_flags_t flags)
+void arch_add_irn_flags(ir_node *node, arch_irn_flags_t flags)
 {
-       backend_info_t *info = be_get_info(node);
+       backend_info_t *info;
+       assert(!is_Proj(node));
+       info = be_get_info(node);
        info->flags |= flags;
 }
 
+bool arch_reg_is_allocatable(const arch_register_req_t *req,
+                             const arch_register_t *reg)
+{
+       if (reg->type & arch_register_type_joker)
+               return true;
+       if (req->type == arch_register_req_type_none)
+               return false;
+       if (req->type & arch_register_req_type_limited) {
+               if (arch_register_get_class(reg) != req->cls)
+                       return false;
+               return rbitset_is_set(req->limited, arch_register_get_index(reg));
+       }
+       return req->cls == arch_register_get_class(reg);
+}
+
 void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
                             const ir_node *node)
 {
@@ -311,25 +328,25 @@ void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
 void arch_dump_reqs_and_registers(FILE *F, const ir_node *node)
 {
        int              n_ins  = get_irn_arity(node);
-       int              n_outs = arch_irn_get_n_outs(node);
-       arch_irn_flags_t flags  = arch_irn_get_flags(node);
+       int              n_outs = arch_get_irn_n_outs(node);
+       arch_irn_flags_t flags  = arch_get_irn_flags(node);
        int              i;
 
        for (i = 0; i < n_ins; ++i) {
-               const arch_register_req_t *req = arch_get_in_register_req(node, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_in(node, i);
                fprintf(F, "inreq #%d = ", i);
                arch_dump_register_req(F, req, node);
                fputs("\n", F);
        }
        for (i = 0; i < n_outs; ++i) {
-               const arch_register_req_t *req = arch_get_out_register_req(node, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_out(node, i);
                fprintf(F, "outreq #%d = ", i);
                arch_dump_register_req(F, req, node);
                fputs("\n", F);
        }
        for (i = 0; i < n_outs; ++i) {
-               const arch_register_t     *reg = arch_irn_get_register(node, i);
-               const arch_register_req_t *req = arch_get_out_register_req(node, i);
+               const arch_register_t     *reg = arch_get_irn_register_out(node, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_out(node, i);
                if (req->cls == NULL)
                        continue;
                fprintf(F, "reg #%d = %s\n", i, reg != NULL ? reg->name : "n/a");
@@ -357,13 +374,3 @@ void arch_dump_reqs_and_registers(FILE *F, const ir_node *node)
        }
        fprintf(F, " (%d)\n", (int)flags);
 }
-
-static const arch_register_req_t no_requirement = {
-       arch_register_req_type_none,
-       NULL,
-       NULL,
-       0,
-       0,
-       0
-};
-const arch_register_req_t *arch_no_register_req = &no_requirement;
index 540c332..4a4129f 100644 (file)
@@ -139,76 +139,98 @@ void            arch_perform_memory_operand(ir_node *irn, ir_node *spill,
                                             unsigned int i);
 
 /**
- * Get the register requirements for a node.
- * @note Deprecated API! Preferably use
- *       arch_get_in_register_req and
- *       arch_get_out_register_req.
- *
- * @param irn The node.
- * @param pos The position of the operand you're interested in.
- * @return    A pointer to the register requirements.  If NULL is returned, the
- *            operand was no register operand.
+ * Get the register allocated for a value.
  */
-const arch_register_req_t *arch_get_register_req(const ir_node *irn, int pos);
+const arch_register_t *arch_get_irn_register(const ir_node *irn);
 
 /**
- * Check, if a register is assignable to an operand of a node.
- * @param irn The node.
- * @param pos The position of the operand.
- * @param reg The register.
- * @return    1, if the register might be allocated to the operand 0 if not.
+ * Assign register to a value
  */
-int arch_reg_is_allocatable(const ir_node *irn, int pos,
-                            const arch_register_t *reg);
-
-#define arch_reg_out_is_allocatable(irn, reg) arch_reg_is_allocatable(irn, -1, reg)
+void arch_set_irn_register(ir_node *irn, const arch_register_t *reg);
 
 /**
- * Get the register class of an operand of a node.
- * @param irn The node.
- * @param pos The position of the operand, -1 for the output.
- * @return    The register class of the operand or NULL, if
- *            operand is a non-register operand.
+ * Set the register for a certain output operand.
  */
-const arch_register_class_t *arch_get_irn_reg_class(const ir_node *irn,
-                                                    int pos);
+void arch_set_irn_register_out(ir_node *irn, int pos, const arch_register_t *r);
 
-#define arch_get_irn_reg_class_out(irn) arch_get_irn_reg_class(irn, -1)
+const arch_register_t *arch_get_irn_register_out(const ir_node *irn, int pos);
+const arch_register_t *arch_get_irn_register_in(const ir_node *irn, int pos);
 
 /**
- * Get the register allocated at a certain output operand of a node.
- * @param irn The node.
- * @return    The register allocated for this operand
+ * Get register constraints for an operand at position @p
  */
-const arch_register_t *arch_get_irn_register(const ir_node *irn);
-const arch_register_t *arch_irn_get_register(const ir_node *irn, int pos);
+static inline const arch_register_req_t *arch_get_irn_register_req_in(
+               const ir_node *node, int pos)
+{
+       const backend_info_t *info = be_get_info(node);
+       if (info->in_reqs == NULL)
+               return arch_no_register_req;
+       return info->in_reqs[pos];
+}
 
 /**
- * Set the register for a certain output operand.
- * @param irn The node.
- * @param reg The register.
+ * Get register constraint for a produced result (the @p pos result)
  */
-void arch_set_irn_register(ir_node *irn, const arch_register_t *reg);
-void arch_irn_set_register(ir_node *irn, int pos, const arch_register_t *reg);
+static inline const arch_register_req_t *arch_get_irn_register_req_out(
+               const ir_node *node, int pos)
+{
+       const backend_info_t *info = be_get_info(node);
+       if (info->out_infos == NULL)
+               return arch_no_register_req;
+       return info->out_infos[pos].req;
+}
 
-/**
- * Classify a node.
- * @param irn The node.
- * @return A classification of the node.
- */
-arch_irn_class_t arch_irn_classify(const ir_node *irn);
+static inline void arch_set_irn_register_req_out(ir_node *node, int pos,
+               const arch_register_req_t *req)
+{
+       backend_info_t *info = be_get_info(node);
+       assert(pos < (int)ARR_LEN(info->out_infos));
+       info->out_infos[pos].req = req;
+}
+
+static inline void arch_set_irn_register_reqs_in(ir_node *node,
+               const arch_register_req_t **reqs)
+{
+       backend_info_t *info = be_get_info(node);
+       info->in_reqs = reqs;
+}
+
+static inline const arch_register_req_t **arch_get_irn_register_reqs_in(
+               const ir_node *node)
+{
+       backend_info_t *info = be_get_info(node);
+       return info->in_reqs;
+}
+
+const arch_register_req_t *arch_get_irn_register_req(const ir_node *node);
 
 /**
  * Get the flags of a node.
  * @param irn The node.
  * @return The flags.
  */
-arch_irn_flags_t arch_irn_get_flags(const ir_node *irn);
+arch_irn_flags_t arch_get_irn_flags(const ir_node *irn);
 
-void arch_irn_set_flags(ir_node *node, arch_irn_flags_t flags);
-void arch_irn_add_flags(ir_node *node, arch_irn_flags_t flags);
+void arch_set_irn_flags(ir_node *node, arch_irn_flags_t flags);
+void arch_add_irn_flags(ir_node *node, arch_irn_flags_t flags);
 
-#define arch_irn_is(irn, flag) ((arch_irn_get_flags(irn) & arch_irn_flags_ ## flag) != 0)
+#define arch_irn_is(irn, flag) ((arch_get_irn_flags(irn) & arch_irn_flags_ ## flag) != 0)
+
+static inline unsigned arch_get_irn_n_outs(const ir_node *node)
+{
+       backend_info_t *info = be_get_info(node);
+       if (info->out_infos == NULL)
+               return 0;
+
+       return (unsigned)ARR_LEN(info->out_infos);
+}
+
+/**
+ * Classify a node.
+ * @param irn The node.
+ * @return A classification of the node.
+ */
+arch_irn_class_t arch_irn_classify(const ir_node *irn);
 
 /**
  * Initialize the architecture environment struct.
@@ -319,30 +341,30 @@ struct arch_register_req_t {
                                                 registers are required */
 };
 
-static inline int reg_reqs_equal(const arch_register_req_t *req1,
-                                 const arch_register_req_t *req2)
+static inline bool reg_reqs_equal(const arch_register_req_t *req1,
+                                  const arch_register_req_t *req2)
 {
        if (req1 == req2)
-               return 1;
+               return true;
 
        if (req1->type != req2->type
-                       || req1->cls != req2->cls
-                       || req1->other_same != req2->other_same
-                       || req1->other_different != req2->other_different)
-               return 0;
+           || req1->cls != req2->cls
+           || req1->other_same != req2->other_same
+           || req1->other_different != req2->other_different)
+               return false;
 
        if (req1->limited != NULL) {
                size_t n_regs;
 
                if (req2->limited == NULL)
-                       return 0;
+                       return false;
 
                n_regs = arch_register_class_n_regs(req1->cls);
                if (!rbitsets_equal(req1->limited, req2->limited, n_regs))
-                       return 0;
+                       return false;
        }
 
-       return 1;
+       return true;
 }
 
 /**
@@ -572,6 +594,7 @@ struct arch_isa_if_t {
 
        /**
         * Checks if the given register is callee/caller saved.
+        * @deprecated, only necessary if backend still uses beabi functions
         */
        int (*register_saved_by)(const arch_register_t *reg, int callee);
 };
@@ -613,131 +636,21 @@ struct arch_env_t {
                                                      stuff from beabi.h/.c */
 };
 
-static inline unsigned arch_irn_get_n_outs(const ir_node *node)
-{
-       backend_info_t *info = be_get_info(node);
-       if (info->out_infos == NULL)
-               return 0;
-
-       return (unsigned)ARR_LEN(info->out_infos);
-}
-
-static inline const arch_irn_ops_t *get_irn_ops_simple(const ir_node *node)
-{
-       const ir_op          *ops    = get_irn_op(node);
-       const arch_irn_ops_t *be_ops = get_op_ops(ops)->be_ops;
-       assert(!is_Proj(node));
-       return be_ops;
-}
-
-static inline const arch_register_req_t *arch_get_register_req_out(
-               const ir_node *irn)
-{
-       int             pos = 0;
-       backend_info_t *info;
-
-       /* you have to query the Proj nodes for the constraints (or use
-        * arch_get_out_register_req. Querying a mode_T node and expecting
-        * arch_no_register_req is a bug in your code! */
-       assert(get_irn_mode(irn) != mode_T);
-
-       if (is_Proj(irn)) {
-               pos = get_Proj_proj(irn);
-               irn = get_Proj_pred(irn);
-       }
-
-       info = be_get_info(irn);
-       if (info->out_infos == NULL)
-               return arch_no_register_req;
-
-       return info->out_infos[pos].req;
-}
-
 static inline bool arch_irn_is_ignore(const ir_node *irn)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(irn);
-       return !!(req->type & arch_register_req_type_ignore);
+       const arch_register_req_t *req = arch_get_irn_register_req(irn);
+       return req->type & arch_register_req_type_ignore;
 }
 
 static inline bool arch_irn_consider_in_reg_alloc(
                const arch_register_class_t *cls, const ir_node *node)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(node);
+       const arch_register_req_t *req = arch_get_irn_register_req(node);
        return
                req->cls == cls &&
                !(req->type & arch_register_req_type_ignore);
 }
 
-/**
- * Get register constraints for an operand at position @p
- */
-static inline const arch_register_req_t *arch_get_in_register_req(
-               const ir_node *node, int pos)
-{
-       const backend_info_t *info = be_get_info(node);
-       if (info->in_reqs == NULL)
-               return arch_no_register_req;
-       return info->in_reqs[pos];
-}
-
-/**
- * Get register constraint for a produced result (the @p pos result)
- */
-static inline const arch_register_req_t *arch_get_out_register_req(
-               const ir_node *node, int pos)
-{
-       const backend_info_t *info = be_get_info(node);
-       if (info->out_infos == NULL)
-               return arch_no_register_req;
-       return info->out_infos[pos].req;
-}
-
-static inline void arch_set_out_register_req(ir_node *node, int pos,
-               const arch_register_req_t *req)
-{
-       backend_info_t *info = be_get_info(node);
-       assert(pos < (int) arch_irn_get_n_outs(node));
-       info->out_infos[pos].req = req;
-}
-
-static inline void arch_set_in_register_reqs(ir_node *node,
-                                            const arch_register_req_t **in_reqs)
-{
-       backend_info_t *info = be_get_info(node);
-       info->in_reqs = in_reqs;
-}
-
-static inline const arch_register_req_t **arch_get_in_register_reqs(
-               const ir_node *node)
-{
-       backend_info_t *info = be_get_info(node);
-       return info->in_reqs;
-}
-
-/**
- * Check if the given register is callee save, ie. will be save by the callee.
- */
-static inline bool arch_register_is_callee_save(
-       const arch_env_t      *arch_env,
-       const arch_register_t *reg)
-{
-       if (arch_env->impl->register_saved_by)
-               return arch_env->impl->register_saved_by(reg, /*callee=*/1);
-       return false;
-}
-
-/**
- * Check if the given register is caller save, ie. must be save by the caller.
- */
-static inline bool arch_register_is_caller_save(
-       const arch_env_t      *arch_env,
-       const arch_register_t *reg)
-{
-       if (arch_env->impl->register_saved_by)
-               return arch_env->impl->register_saved_by(reg, /*callee=*/0);
-       return false;
-}
-
 /**
  * Iterate over all values defined by an instruction.
  * Only looks at values in a certain register class where the requirements
@@ -751,13 +664,13 @@ static inline bool arch_register_is_caller_save(
                foreach_out_edge(node, edge_) {                                    \
                        const arch_register_req_t *req_;                               \
                        value = get_edge_src_irn(edge_);                               \
-                       req_  = arch_get_register_req_out(value);                      \
+                       req_  = arch_get_irn_register_req(value);                      \
                        if (req_->cls != cls)                                          \
                                continue;                                                  \
                        code                                                           \
                }                                                                  \
        } else {                                                               \
-               const arch_register_req_t *req_ = arch_get_register_req_out(node); \
+               const arch_register_req_t *req_ = arch_get_irn_register_req(node); \
                value = node;                                                      \
                if (req_->cls == cls) {                                            \
                        code                                                           \
@@ -772,4 +685,14 @@ static inline bool arch_register_is_caller_save(
                code                                                               \
        )
 
+static inline const arch_register_class_t *arch_get_irn_reg_class(
+               const ir_node *node)
+{
+       const arch_register_req_t *req = arch_get_irn_register_req(node);
+       return req->cls;
+}
+
+bool arch_reg_is_allocatable(const arch_register_req_t *req,
+                             const arch_register_t *reg);
+
 #endif
index 7fc39bb..165db4a 100644 (file)
@@ -261,7 +261,7 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
        ir_node *sub_res, *curr;
        be_ifg_t *ifg = chordal_env->ifg;
        neighbours_iter_t iter;
-
+       const arch_register_req_t *req;
 
        DBG((dbg, LEVEL_3, "\t    %+F \tcaused col(%+F) \t%2d --> %2d\n", trigger, irn, irn_col, col));
 
@@ -277,13 +277,13 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
                return irn;
        }
 
+       req = arch_get_irn_register_req(irn);
 #ifdef SEARCH_FREE_COLORS
        /* If we resolve conflicts (recursive calls) we can use any unused color.
         * In case of the first call @p col must be used.
         */
        if (irn != trigger) {
                bitset_t *free_cols = bitset_alloca(cls->n_regs);
-               const arch_register_req_t *req;
                ir_node *curr;
                int free_col;
 
@@ -291,7 +291,6 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
                bitset_copy(free_cols, co->cenv->allocatable_regs);
 
                /* Exclude colors not assignable to the irn */
-               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);
@@ -315,7 +314,7 @@ static ir_node *qnode_color_irn(const qnode_t *qn, ir_node *irn, int col, const
 #endif /* SEARCH_FREE_COLORS */
 
        /* If target color is not allocatable changing color is impossible */
-       if (!arch_reg_out_is_allocatable(irn, arch_register_for_index(cls, col))) {
+       if (!arch_reg_is_allocatable(req, arch_register_for_index(cls, col))) {
                DBG((dbg, LEVEL_3, "\t      %+F impossible\n", irn));
                return CHANGE_IMPOSSIBLE;
        }
@@ -567,7 +566,7 @@ static void ou_optimize(unit_t *ou)
        /* init queue */
        INIT_LIST_HEAD(&ou->queue);
 
-       req              = arch_get_register_req_out(ou->nodes[0]);
+       req              = arch_get_irn_register_req(ou->nodes[0]);
        allocatable_regs = ou->co->cenv->allocatable_regs;
        n_regs           = req->cls->n_regs;
        if (arch_register_req_is(req, limited)) {
index 7773b5a..217819e 100644 (file)
@@ -250,7 +250,7 @@ static inline bitset_t *get_adm(co2_t *env, co2_irn_t *ci)
        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_out(ci->irn);
+               req = arch_get_irn_register_req(ci->irn);
 
                if (arch_register_req_is(req, limited)) {
                        int i, n;
@@ -290,7 +290,7 @@ static inline int is_constrained(co2_t *env, co2_irn_t *ci)
 
 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 = arch_get_register_req_out(irn);
+       const arch_register_req_t *req = arch_get_irn_register_req(irn);
 
        if (arch_register_req_is(req, limited)) {
                unsigned n_regs   = env->co->cls->n_regs;
@@ -1072,7 +1072,7 @@ static const char *get_dot_color_name(size_t col)
 
 static const char *get_dot_shape_name(co2_irn_t *ci)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(ci->irn);
+       const arch_register_req_t *req = arch_get_irn_register_req(ci->irn);
 
        if (arch_register_req_is(req, limited))
                return "diamond";
@@ -1094,7 +1094,7 @@ static void ifg_dump_graph_attr(FILE *f, void *self)
 
 static int ifg_is_dump_node(void *self, ir_node *irn)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(irn);
+       const arch_register_req_t *req = arch_get_irn_register_req(irn);
        (void)self;
        return !(req->type & arch_register_req_type_ignore);
 }
index f5fd8c9..bac5a04 100644 (file)
@@ -401,7 +401,7 @@ static void *co_mst_irn_init(ir_phase *ph, const ir_node *irn)
        res->adm_colors = bitset_obstack_alloc(phase_obst(ph), env->n_regs);
 
        /* Exclude colors not assignable to the irn */
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (arch_register_req_is(req, limited))
                rbitset_copy_to_bitset(req->limited, res->adm_colors);
        else
index 207af2f..0a788c9 100644 (file)
@@ -139,7 +139,7 @@ void sr_remove(size_red_t *sr)
        while (redo) {
                redo = 0;
                be_ifg_foreach_node(ifg, &iter, irn) {
-                       const arch_register_req_t *req = arch_get_register_req_out(irn);
+                       const arch_register_req_t *req = arch_get_irn_register_req(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)) {
index 395b6b5..b2dd431 100644 (file)
@@ -89,7 +89,7 @@ static void build_coloring_cstr(ilp_env_t *ienv)
 
                        pmap_insert(lenv->nr_2_irn, INT_TO_PTR(node_nr), irn);
 
-                       req = arch_get_register_req_out(irn);
+                       req = arch_get_irn_register_req(irn);
 
                        bitset_clear_all(colors);
 
index 682828f..f90ec70 100644 (file)
@@ -235,7 +235,7 @@ static int co_is_optimizable_root(ir_node *irn)
        if (is_Reg_Phi(irn) || is_Perm_Proj(irn))
                return 1;
 
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (is_2addr_code(req))
                return 1;
 
@@ -395,7 +395,7 @@ static void co_collect_units(ir_node *irn, void *env)
 
        if (get_irn_mode(irn) == mode_T)
                return;
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (req->cls != co->cls)
                return;
        if (!co_is_optimizable_root(irn))
@@ -422,7 +422,7 @@ static void co_collect_units(ir_node *irn, void *env)
                        int o, arg_pos;
                        ir_node *arg = get_irn_n(irn, i);
 
-                       assert(arch_get_irn_reg_class_out(arg) == co->cls && "Argument not in same register class.");
+                       assert(arch_get_irn_reg_class(arg) == co->cls && "Argument not in same register class.");
                        if (arg == irn)
                                continue;
                        if (nodes_interfere(co->cenv, irn, arg)) {
@@ -544,7 +544,7 @@ static int compare_ous(const void *k1, const void *k2)
        /* Units with constraints come first */
        u1_has_constr = 0;
        for (i=0; i<u1->node_count; ++i) {
-               arch_get_register_req_out(&req, u1->nodes[i]);
+               arch_get_irn_register_req(&req, u1->nodes[i]);
                if (arch_register_req_is(&req, limited)) {
                        u1_has_constr = 1;
                        break;
@@ -553,7 +553,7 @@ static int compare_ous(const void *k1, const void *k2)
 
        u2_has_constr = 0;
        for (i=0; i<u2->node_count; ++i) {
-               arch_get_register_req_out(&req, u2->nodes[i]);
+               arch_get_irn_register_req(&req, u2->nodes[i]);
                if (arch_register_req_is(&req, limited)) {
                        u2_has_constr = 1;
                        break;
@@ -803,7 +803,7 @@ static void build_graph_walker(ir_node *irn, void *env)
 
        if (get_irn_mode(irn) == mode_T)
                return;
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (req->cls != co->cls || arch_irn_is_ignore(irn))
                return;
 
@@ -872,7 +872,7 @@ static int co_dump_appel_disjoint_constraints(const copy_opt_t *co, ir_node *a,
        constr[1] = bitset_alloca(co->cls->n_regs);
 
        for (j = 0; j < 2; ++j) {
-               const arch_register_req_t *req = arch_get_register_req_out(nodes[j]);
+               const arch_register_req_t *req = arch_get_irn_register_req(nodes[j]);
                if (arch_register_req_is(req, limited))
                        rbitset_copy_to_bitset(req->limited, constr[j]);
                else
@@ -925,7 +925,7 @@ void co_dump_appel_graph(const copy_opt_t *co, FILE *f)
                if (!arch_irn_is_ignore(irn)) {
                        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);
+                       const arch_register_req_t *req = arch_get_irn_register_req(irn);
                        ir_node                   *adj;
 
                        if (arch_register_req_is(req, limited)) {
@@ -1030,7 +1030,7 @@ static void ifg_dump_node_attr(FILE *f, void *self, ir_node *irn)
 {
        co_ifg_dump_t             *env     = (co_ifg_dump_t*)self;
        const arch_register_t     *reg     = arch_get_irn_register(irn);
-       const arch_register_req_t *req     = arch_get_register_req_out(irn);
+       const arch_register_req_t *req     = arch_get_irn_register_req(irn);
        int                        limited = arch_register_req_is(req, limited);
 
        if (env->flags & CO_IFG_DUMP_LABELS) {
index 6ea8dd1..4d010dd 100644 (file)
@@ -240,8 +240,9 @@ static void fix_flags_walker(ir_node *block, void *env)
                /* test whether the current node needs flags */
                arity = get_irn_arity(node);
                for (i = 0; i < arity; ++i) {
-                       const arch_register_class_t *cls = arch_get_irn_reg_class(node, i);
-                       if (cls == flag_class) {
+                       const arch_register_req_t *req
+                               = arch_get_irn_register_req_in(node, i);
+                       if (req->cls == flag_class) {
                                assert(new_flags_needed == NULL);
                                new_flags_needed = get_irn_n(node, i);
                        }
index f919612..50867f9 100644 (file)
@@ -379,7 +379,7 @@ static void int_comp_rec(be_ifg_t *ifg, ir_node *n, bitset_t *seen)
                if (bitset_contains_irn(seen, m))
                        continue;
 
-               if (arch_get_register_req_out(m)->type & arch_register_req_type_ignore)
+               if (arch_get_irn_register_req(m)->type & arch_register_req_type_ignore)
                        continue;
 
                bitset_add_irn(seen, m);
@@ -400,7 +400,7 @@ static int int_component_stat(ir_graph *irg, be_ifg_t *ifg)
                if (bitset_contains_irn(seen, n))
                        continue;
 
-               if (arch_get_register_req_out(n)->type & arch_register_req_type_ignore)
+               if (arch_get_irn_register_req(n)->type & arch_register_req_type_ignore)
                        continue;
 
                ++n_comp;
index 7027e77..10ba2e1 100644 (file)
@@ -42,7 +42,7 @@ void be_info_new_node(ir_node *node)
        struct obstack *obst;
        backend_info_t *info;
 
-       /* Projs need no be info, their tuple holds all information */
+       /* Projs need no be info, all info is fetched from their predecessor */
        if (is_Proj(node))
                return;
 
@@ -57,17 +57,15 @@ void be_info_new_node(ir_node *node)
         * backend graphs
         */
        switch (get_irn_opcode(node)) {
-       case iro_Bad:
        case iro_Block:
        case iro_Dummy:
-       case iro_End:
-       case iro_Unknown:
-               info->flags |= arch_irn_flags_not_scheduled;
-               break;
        case iro_NoMem:
        case iro_Anchor:
        case iro_Pin:
        case iro_Sync:
+       case iro_Bad:
+       case iro_End:
+       case iro_Unknown:
                info->flags |= arch_irn_flags_not_scheduled;
                info->out_infos = NEW_ARR_D(reg_out_info_t, obst, 1);
                memset(info->out_infos, 0, 1 * sizeof(info->out_infos[0]));
index 4eee042..5f50b28 100644 (file)
@@ -57,7 +57,7 @@ static void add_machine_operands(const be_insn_env_t *env, be_insn_t *insn, ir_n
                        be_operand_t o;
 
                        /* found a register use, create an operand */
-                       o.req     = arch_get_register_req(mach_op, i);
+                       o.req     = arch_get_irn_register_req_in(mach_op, i);
                        o.carrier = op;
                        o.irn     = insn->irn;
                        o.pos     = i;
@@ -105,7 +105,7 @@ be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn)
 
                        if (arch_irn_consider_in_reg_alloc(env->cls, p)) {
                                /* found a def: create a new operand */
-                               o.req             = arch_get_register_req_out(p);
+                               o.req             = arch_get_irn_register_req(p);
                                o.carrier         = p;
                                o.irn             = irn;
                                o.pos             = -(get_Proj_proj(p) + 1);
@@ -119,7 +119,7 @@ be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn)
                }
        } else if (arch_irn_consider_in_reg_alloc(env->cls, irn)) {
                /* only one def, create one operand */
-               o.req     = arch_get_register_req_out(irn);
+               o.req     = arch_get_irn_register_req(irn);
                o.carrier = irn;
                o.irn     = irn;
                o.pos     = -1;
@@ -145,7 +145,7 @@ be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn)
                        add_machine_operands(env, insn, op);
                } else if (arch_irn_consider_in_reg_alloc(env->cls, op)) {
                        /* found a register use, create an operand */
-                       o.req     = arch_get_register_req(irn, i);
+                       o.req     = arch_get_irn_register_req_in(irn, i);
                        o.carrier = op;
                        o.irn     = irn;
                        o.pos     = i;
index ef8e6b5..972de5e 100644 (file)
@@ -162,7 +162,7 @@ static void remove_empty_block(ir_node *block)
 
        sched_foreach(block, node) {
                if (! is_Jmp(node)
-                               && !(arch_irn_get_flags(node) & arch_irn_flags_simple_jump))
+                               && !(arch_get_irn_flags(node) & arch_irn_flags_simple_jump))
                        goto check_preds;
                if (jump != NULL) {
                        /* we should never have 2 jumps in a block */
index 22abca7..692fee1 100644 (file)
@@ -114,7 +114,7 @@ static void add_to_sched(block_sched_env_t *env, ir_node *irn);
 static void node_ready(block_sched_env_t *env, ir_node *pred, ir_node *irn)
 {
        if (is_Proj(irn)
-           || (arch_irn_get_flags(irn) & arch_irn_flags_not_scheduled)) {
+           || (arch_get_irn_flags(irn) & arch_irn_flags_not_scheduled)) {
                selected(env, irn);
                DB((dbg, LEVEL_3, "\tmaking immediately available: %+F\n", irn));
        } else if (be_is_Keep(irn) || be_is_CopyKeep(irn)) {
@@ -193,7 +193,7 @@ static void selected(block_sched_env_t *env, ir_node *node)
  */
 static void add_to_sched(block_sched_env_t *env, ir_node *irn)
 {
-       assert(! (arch_irn_get_flags(irn) & arch_irn_flags_not_scheduled));
+       assert(! (arch_get_irn_flags(irn) & arch_irn_flags_not_scheduled));
 
        sched_add_before(env->block, irn);
 
index 344564c..aa22621 100644 (file)
@@ -516,7 +516,7 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different,
 
        op_set = &env->op_set;
        block  = get_nodes_block(irn);
-       cls    = arch_get_irn_reg_class_out(other_different);
+       cls    = arch_get_irn_reg_class(other_different);
 
        /* Make a not spillable copy of the different node   */
        /* this is needed because the different irn could be */
@@ -527,7 +527,7 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different,
        cpy = find_copy(skip_Proj(irn), other_different);
        if (! cpy) {
                cpy = be_new_Copy(cls, block, other_different);
-               arch_irn_set_flags(cpy, arch_irn_flags_dont_spill);
+               arch_set_irn_flags(cpy, arch_irn_flags_dont_spill);
                DB((dbg_constr, LEVEL_1, "created non-spillable %+F for value %+F\n", cpy, other_different));
        } else {
                DB((dbg_constr, LEVEL_1, "using already existing %+F for value %+F\n", cpy, other_different));
@@ -582,7 +582,7 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different,
  */
 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_out(irn);
+       const arch_register_req_t *req = arch_get_irn_register_req(irn);
 
        if (arch_register_req_is(req, must_be_different)) {
                const unsigned other = req->other_different;
@@ -867,7 +867,7 @@ static int push_through_perm(ir_node *perm)
        /* get some Proj and find out the register class of that Proj. */
        const ir_edge_t             *edge     = get_irn_out_edge_first_kind(perm, EDGE_KIND_NORMAL);
        ir_node                     *one_proj = get_edge_src_irn(edge);
-       const arch_register_class_t *cls      = arch_get_irn_reg_class_out(one_proj);
+       const arch_register_class_t *cls      = arch_get_irn_reg_class(one_proj);
        assert(is_Proj(one_proj));
 
        DB((dbg_permmove, LEVEL_1, "perm move %+F irg %+F\n", perm, irg));
@@ -920,7 +920,7 @@ found_front:
                        break;
                if (arch_irn_is(node, modify_flags))
                        break;
-               req = arch_get_register_req_out(node);
+               req = arch_get_irn_register_req(node);
                if (req->type != arch_register_req_type_normal)
                        break;
                for (i = get_irn_arity(node) - 1; i >= 0; --i) {
index e798492..d560bc6 100644 (file)
@@ -283,7 +283,7 @@ ir_node *be_new_Spill(const arch_register_class_t *cls,
         */
        be_set_constr_in(res, n_be_Spill_frame, arch_no_register_req);
 
-       arch_set_out_register_req(res, 0, arch_no_register_req);
+       arch_set_irn_register_req_out(res, 0, arch_no_register_req);
 
        return res;
 }
@@ -305,7 +305,7 @@ ir_node *be_new_Reload(const arch_register_class_t *cls,
        be_node_set_reg_class_out(res, 0, cls);
 
        be_node_set_reg_class_in(res, n_be_Reload_frame, cls_frame);
-       arch_irn_set_flags(res, arch_irn_flags_rematerializable);
+       arch_set_irn_flags(res, arch_irn_flags_rematerializable);
 
        a         = (be_frame_attr_t*) get_irn_generic_attr(res);
        a->ent    = NULL;
@@ -656,7 +656,7 @@ ir_node *be_new_AddSP(const arch_register_t *sp, ir_node *bl, ir_node *old_sp,
        /* Set output constraint to stack register. */
        be_set_constr_single_reg_in(irn, n_be_AddSP_old_sp, sp,
                                    arch_register_req_type_none);
-       be_node_set_reg_class_in(irn, n_be_AddSP_size, arch_register_get_class(sp));
+       be_node_set_reg_class_in(irn, n_be_AddSP_size, sp->reg_class);
        be_set_constr_single_reg_out(irn, pn_be_AddSP_sp, sp,
                                     arch_register_req_type_produces_sp);
 
@@ -682,7 +682,7 @@ ir_node *be_new_SubSP(const arch_register_t *sp, ir_node *bl, ir_node *old_sp, i
        /* Set output constraint to stack register. */
        be_set_constr_single_reg_in(irn, n_be_SubSP_old_sp, sp,
                                    arch_register_req_type_none);
-       be_node_set_reg_class_in(irn, n_be_SubSP_size, arch_register_get_class(sp));
+       be_node_set_reg_class_in(irn, n_be_SubSP_size, sp->reg_class);
        be_set_constr_single_reg_out(irn, pn_be_SubSP_sp, sp, arch_register_req_type_produces_sp);
 
        return irn;
@@ -899,7 +899,7 @@ void be_set_constr_single_reg_out(ir_node *node, int pos,
                req = be_create_reg_req(obst, reg, additional_types);
        }
 
-       arch_irn_set_register(node, pos, reg);
+       arch_set_irn_register_out(node, pos, reg);
        be_set_constr_out(node, pos, req);
 }
 
@@ -952,8 +952,8 @@ ir_node *be_spill(ir_node *block, ir_node *irn)
 {
        ir_graph                    *irg       = get_Block_irg(block);
        ir_node                     *frame     = get_irg_frame(irg);
-       const arch_register_class_t *cls       = arch_get_irn_reg_class_out(irn);
-       const arch_register_class_t *cls_frame = arch_get_irn_reg_class_out(frame);
+       const arch_register_class_t *cls       = arch_get_irn_reg_class(irn);
+       const arch_register_class_t *cls_frame = arch_get_irn_reg_class(frame);
        ir_node                     *spill;
 
        spill = be_new_Spill(cls, cls_frame, block, frame, irn);
@@ -966,7 +966,7 @@ ir_node *be_reload(const arch_register_class_t *cls, ir_node *insert, ir_mode *m
        ir_node  *bl    = is_Block(insert) ? insert : get_nodes_block(insert);
        ir_graph *irg   = get_Block_irg(bl);
        ir_node  *frame = get_irg_frame(irg);
-       const arch_register_class_t *cls_frame = arch_get_irn_reg_class_out(frame);
+       const arch_register_class_t *cls_frame = arch_get_irn_reg_class(frame);
 
        assert(be_is_Spill(spill) || (is_Phi(spill) && get_irn_mode(spill) == mode_M));
 
@@ -1049,13 +1049,13 @@ static const arch_irn_ops_t be_node_irn_ops = {
 static int get_start_reg_index(ir_graph *irg, const arch_register_t *reg)
 {
        ir_node *start  = get_irg_start(irg);
-       unsigned n_outs = arch_irn_get_n_outs(start);
+       unsigned n_outs = arch_get_irn_n_outs(start);
        int      i;
 
        /* do a naive linear search... */
        for (i = 0; i < (int)n_outs; ++i) {
                const arch_register_req_t *out_req
-                       = arch_get_out_register_req(start, i);
+                       = arch_get_irn_register_req_out(start, i);
                if (! (out_req->type & arch_register_req_type_limited))
                        continue;
                if (out_req->cls != arch_register_get_class(reg))
@@ -1091,7 +1091,7 @@ int be_find_return_reg_input(ir_node *ret, const arch_register_t *reg)
        int i;
        /* do a naive linear search... */
        for (i = 0; i < arity; ++i) {
-               const arch_register_req_t *req = arch_get_in_register_req(ret, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_in(ret, i);
                if (! (req->type & arch_register_req_type_limited))
                        continue;
                if (req->cls != arch_register_get_class(reg))
index 4772c74..c658814 100644 (file)
@@ -155,7 +155,10 @@ static void create_pbqp_node(be_pbqp_alloc_env_t *pbqp_alloc_env, ir_node *irn)
        /* set costs depending on register constrains */
        unsigned idx;
        for (idx = 0; idx < colors_n; idx++) {
-               if (!bitset_is_set(allocatable_regs, idx) || !arch_reg_out_is_allocatable(irn, arch_register_for_index(cls, idx))) {
+               const arch_register_req_t *req = arch_get_irn_register_req(irn);
+               const arch_register_t     *reg = arch_register_for_index(cls, idx);
+               if (!bitset_is_set(allocatable_regs, idx)
+                   || !arch_reg_is_allocatable(req, reg)) {
                        /* constrained */
                        vector_set(costs_vector, idx, INF_COSTS);
                        cntConstrains++;
@@ -259,7 +262,7 @@ static void create_affinity_edges(ir_node *irn, void *env)
 {
        be_pbqp_alloc_env_t         *pbqp_alloc_env = (be_pbqp_alloc_env_t*)env;
        const arch_register_class_t *cls            = pbqp_alloc_env->cls;
-       const arch_register_req_t   *req            = arch_get_register_req_out(irn);
+       const arch_register_req_t   *req            = arch_get_irn_register_req(irn);
        unsigned                     pos;
        unsigned                     max;
 
index 6f5b840..b8cb95b 100644 (file)
@@ -271,7 +271,7 @@ static void give_penalties_for_limits(const ir_nodeset_t *live_nodes,
 static void check_defs(const ir_nodeset_t *live_nodes, float weight,
                        ir_node *node)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(node);
+       const arch_register_req_t *req = arch_get_irn_register_req(node);
        if (req->type & arch_register_req_type_limited) {
                const unsigned *limited = req->limited;
                float           penalty = weight * DEF_FACTOR;
@@ -352,7 +352,7 @@ static void analyze_block(ir_node *block, void *data)
                info = get_allocation_info(node);
                for (i = 0; i < arity; ++i) {
                        ir_node                   *op  = get_irn_n(node, i);
-                       const arch_register_req_t *req = arch_get_register_req_out(op);
+                       const arch_register_req_t *req = arch_get_irn_register_req(op);
                        if (req->cls != cls)
                                continue;
 
@@ -374,7 +374,7 @@ static void analyze_block(ir_node *block, void *data)
                                if (!arch_irn_consider_in_reg_alloc(cls, op))
                                        continue;
 
-                               req = arch_get_register_req(node, i);
+                               req = arch_get_irn_register_req_in(node, i);
                                if (!(req->type & arch_register_req_type_limited))
                                        continue;
 
@@ -390,7 +390,7 @@ static void analyze_block(ir_node *block, void *data)
 
 static void congruence_def(ir_nodeset_t *live_nodes, const ir_node *node)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(node);
+       const arch_register_req_t *req = arch_get_irn_register_req(node);
 
        /* should be same constraint? */
        if (req->type & arch_register_req_type_should_be_same) {
@@ -650,7 +650,7 @@ static bool try_optimistic_split(ir_node *to_split, ir_node *before,
         * (so we don't split away the values produced because of
         *  must_be_different constraints) */
        original_insn = skip_Proj(info->original_value);
-       if (arch_irn_get_flags(original_insn) & arch_irn_flags_dont_spill)
+       if (arch_get_irn_flags(original_insn) & arch_irn_flags_dont_spill)
                return false;
 
        from_reg        = arch_get_irn_register(to_split);
@@ -759,7 +759,7 @@ static void assign_reg(const ir_node *block, ir_node *node,
                return;
        }
 
-       req = arch_get_register_req_out(node);
+       req = arch_get_irn_register_req(node);
        /* ignore reqs must be preassigned */
        assert (! (req->type & arch_register_req_type_ignore));
 
@@ -1131,7 +1131,7 @@ static void solve_lpp(ir_nodeset_t *live_nodes, ir_node *node,
                if (!arch_irn_consider_in_reg_alloc(cls, op))
                        continue;
 
-               req = arch_get_register_req(node, i);
+               req = arch_get_irn_register_req_in(node, i);
                if (!(req->type & arch_register_req_type_limited))
                        continue;
 
@@ -1277,7 +1277,7 @@ static void enforce_constraints(ir_nodeset_t *live_nodes, ir_node *node,
                        continue;
 
                /* are there any limitations for the i'th operand? */
-               req = arch_get_register_req(node, i);
+               req = arch_get_irn_register_req_in(node, i);
                if (req->width > 1)
                        double_width = true;
                if (!(req->type & arch_register_req_type_limited))
@@ -1359,7 +1359,7 @@ static void enforce_constraints(ir_nodeset_t *live_nodes, ir_node *node,
                if (!arch_irn_consider_in_reg_alloc(cls, op))
                        continue;
 
-               req = arch_get_register_req(node, i);
+               req = arch_get_irn_register_req_in(node, i);
                if (!(req->type & arch_register_req_type_limited))
                        continue;
 
@@ -1715,7 +1715,7 @@ static void allocate_coalesce_block(ir_node *block, void *data)
                int                        p;
 
                node = be_lv_get_irn(lv, block, i);
-               req  = arch_get_register_req_out(node);
+               req  = arch_get_irn_register_req(node);
                if (req->cls != cls)
                        continue;
 
index ffa7788..c9f7c95 100644 (file)
@@ -120,7 +120,7 @@ static int count_result(const ir_node* irn)
        if (mode == mode_T)
                return 1;
 
-       if (arch_get_register_req_out(irn)->type & arch_register_req_type_ignore)
+       if (arch_get_irn_register_req(irn)->type & arch_register_req_type_ignore)
                return 0;
 
        return 1;
@@ -198,6 +198,8 @@ static int normal_tree_cost(ir_node* irn, instance_t *inst)
                mode = get_irn_mode(op);
                if (mode == mode_M)
                        continue;
+               if (arch_get_irn_flags(op) & arch_irn_flags_not_scheduled)
+                       continue;
                if (mode != mode_T && arch_irn_is_ignore(op))
                        continue;
                cost = MAX(fc->costs[i].cost + n_op_res, cost);
index 42e0abe..fc12039 100644 (file)
@@ -190,7 +190,7 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl)
        sched_foreach(bl, irn) {
                int i, n;
                if (is_Proj(irn)
-                               || (arch_irn_get_flags(irn) & arch_irn_flags_not_scheduled))
+                               || (arch_get_irn_flags(irn) & arch_irn_flags_not_scheduled))
                        continue;
 
                for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
@@ -246,7 +246,7 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn)
                ir_node *op = get_irn_n(irn, i);
 
                if (is_Proj(op)
-                   || (arch_irn_get_flags(op) & arch_irn_flags_not_scheduled))
+                   || (arch_get_irn_flags(op) & arch_irn_flags_not_scheduled))
                        continue;
 
                sum += compute_max_hops(env, op);
index cf2985d..c83653a 100644 (file)
@@ -64,6 +64,7 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
        unsigned *tmp        = NULL;
        unsigned *def_constr = NULL;
        int       arity      = get_irn_arity(node);
+       ir_node  *def;
 
        int i, i2;
 
@@ -75,7 +76,7 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
         */
        for (i = 0; i < arity; ++i) {
                ir_node                   *op  = get_irn_n(node, i);
-               const arch_register_req_t *req = arch_get_register_req(node, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_in(node, i);
                const arch_register_t     *reg;
                ir_node                   *copy;
 
@@ -110,7 +111,7 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
                ir_node                   *copy;
                const arch_register_req_t *req;
 
-               req = arch_get_register_req(node, i);
+               req = arch_get_irn_register_req_in(node, i);
                if (req->cls != cls)
                        continue;
 
@@ -125,7 +126,7 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
                        ir_node *in2;
                        const arch_register_req_t *req2;
 
-                       req2 = arch_get_register_req(node, i2);
+                       req2 = arch_get_irn_register_req_in(node, i2);
                        if (req2->cls != cls)
                                continue;
                        if (! (req2->type & arch_register_req_type_limited))
@@ -152,27 +153,14 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
        }
 
        /* collect all registers occurring in out constraints. */
-       if (get_irn_mode(node) == mode_T) {
-               const ir_edge_t *edge;
-
-               foreach_out_edge(node, edge) {
-                       ir_node                   *proj = get_edge_src_irn(edge);
-                       const arch_register_req_t *req  = arch_get_register_req_out(proj);
-                       if (! (req->type & arch_register_req_type_limited))
-                               continue;
-
-                       if (def_constr == NULL) {
-                               rbitset_alloca(def_constr, cls->n_regs);
-                       }
-                       rbitset_or(def_constr, req->limited, cls->n_regs);
-               }
-       } else {
-               const arch_register_req_t *req = arch_get_register_req_out(node);
-               if (req->type & arch_register_req_type_limited) {
+       be_foreach_definition(node, cls, def,
+               if (! (req_->type & arch_register_req_type_limited))
+                       continue;
+               if (def_constr == NULL) {
                        rbitset_alloca(def_constr, cls->n_regs);
-                       rbitset_or(def_constr, req->limited, cls->n_regs);
                }
-       }
+               rbitset_or(def_constr, req_->limited, cls->n_regs);
+       );
 
        /* no output constraints => we're good */
        if (def_constr == NULL) {
@@ -195,7 +183,7 @@ static void prepare_constr_insn(be_pre_spill_env_t *env, ir_node *node)
                 * 2) lives through the node.
                 * 3) is constrained to a register occurring in out constraints.
                 */
-               req = arch_get_register_req(node, i);
+               req = arch_get_irn_register_req_in(node, i);
                if (req->cls != cls)
                        continue;
                if (!(req->type & arch_register_req_type_limited))
index 282f885..ee43e8b 100644 (file)
@@ -293,7 +293,7 @@ static unsigned get_distance(ir_node *from, const ir_node *def, int skip_from_us
                return USES_INFINITY;
 
        /* We have to keep nonspillable nodes in the workingset */
-       if (arch_irn_get_flags(skip_Proj_const(def)) & arch_irn_flags_dont_spill)
+       if (arch_get_irn_flags(skip_Proj_const(def)) & arch_irn_flags_dont_spill)
                return 0;
 
        /* give some bonus to rematerialisable nodes */
@@ -479,7 +479,7 @@ static loc_t to_take_or_not_to_take(ir_node* first, ir_node *node,
        }
 
        /* We have to keep nonspillable nodes in the workingset */
-       if (arch_irn_get_flags(skip_Proj_const(node)) & arch_irn_flags_dont_spill) {
+       if (arch_get_irn_flags(skip_Proj_const(node)) & arch_irn_flags_dont_spill) {
                loc.time = 0;
                DB((dbg, DBG_START, "    %+F taken (dontspill node)\n", node, loc.time));
                return loc;
index ef36c8f..1d53209 100644 (file)
@@ -135,7 +135,7 @@ static void spill_node(ir_node *node)
 
 static unsigned get_value_width(const ir_node *node)
 {
-       const arch_register_req_t *req = arch_get_register_req_out(node);
+       const arch_register_req_t *req = arch_get_irn_register_req(node);
        return req->width;
 }
 
index 8dc730a..0595e2c 100644 (file)
@@ -471,7 +471,7 @@ void be_ssa_construction_add_copy(be_ssa_construction_env_t *env,
 
        if (env->mode == NULL) {
                env->mode    = get_irn_mode(copy);
-               env->phi_cls = arch_get_irn_reg_class_out(copy);
+               env->phi_cls = arch_get_irn_reg_class(copy);
        } else {
                assert(env->mode == get_irn_mode(copy));
        }
@@ -493,7 +493,7 @@ void be_ssa_construction_add_copies(be_ssa_construction_env_t *env,
 
        if (env->mode == NULL) {
                env->mode    = get_irn_mode(copies[0]);
-               env->phi_cls = arch_get_irn_reg_class_out(copies[0]);
+               env->phi_cls = arch_get_irn_reg_class(copies[0]);
        }
 
        for (i = 0; i < copies_len; ++i) {
index edf4119..0a393dd 100644 (file)
@@ -416,7 +416,7 @@ static void ssa_destruction_check_walker(ir_node *bl, void *data)
                /* iterate over all args of phi */
                for (i = 0, max = get_irn_arity(phi); i < max; ++i) {
                        ir_node                   *arg = get_irn_n(phi, i);
-                       const arch_register_req_t *req = arch_get_register_req_out(arg);
+                       const arch_register_req_t *req = arch_get_irn_register_req(arg);
 
                        if (req->type & arch_register_req_type_ignore)
                                continue;
index 8c39163..7cb40ef 100644 (file)
@@ -283,12 +283,12 @@ static void collect_stack_nodes_walker(ir_node *node, void *data)
                insn = get_Proj_pred(node);
        }
 
-       if (arch_irn_get_n_outs(insn) == 0)
+       if (arch_get_irn_n_outs(insn) == 0)
                return;
        if (get_irn_mode(node) == mode_T)
                return;
 
-       req = arch_get_register_req_out(node);
+       req = arch_get_irn_register_req(node);
        if (! (req->type & arch_register_req_type_produces_sp))
                return;
 
index 3dbc79f..47c1219 100644 (file)
@@ -284,7 +284,7 @@ static void verify_schedule_walker(ir_node *block, void *data)
 static void check_schedule(ir_node *node, void *data)
 {
        be_verify_schedule_env_t *env = (be_verify_schedule_env_t*)data;
-       bool should_be = !is_Proj(node) && !(arch_irn_get_flags(node) & arch_irn_flags_not_scheduled);
+       bool should_be = !is_Proj(node) && !(arch_get_irn_flags(node) & arch_irn_flags_not_scheduled);
        bool scheduled = bitset_is_set(env->scheduled, get_irn_idx(node));
 
        if (should_be != scheduled) {
@@ -664,13 +664,14 @@ static ir_node                    **registers;
 static void check_output_constraints(ir_node *node)
 {
        /* verify output register */
-       if (arch_get_irn_reg_class_out(node) == regclass) {
+       if (arch_get_irn_reg_class(node) == regclass) {
+               const arch_register_req_t *req = arch_get_irn_register_req(node);
                const arch_register_t *reg = arch_get_irn_register(node);
                if (reg == NULL) {
                        ir_fprintf(stderr, "Verify warning: Node %+F in block %+F(%s) should have a register assigned\n",
                                        node, get_nodes_block(node), get_irg_dump_name(irg));
                        problem_found = 1;
-               } else if (!(reg->type & arch_register_type_joker) && !arch_reg_out_is_allocatable(node, reg)) {
+               } else if (!arch_reg_is_allocatable(req, reg)) {
                        ir_fprintf(stderr, "Verify warning: Register %s assigned as output of %+F not allowed (register constraint) in block %+F(%s)\n",
                                        reg->name, node, get_nodes_block(node), get_irg_dump_name(irg));
                        problem_found = 1;
@@ -686,9 +687,9 @@ static void check_input_constraints(ir_node *node)
        /* verify input register */
        arity = get_irn_arity(node);
        for (i = 0; i < arity; ++i) {
-               const arch_register_req_t *req      = arch_get_in_register_req(node, i);
+               const arch_register_req_t *req      = arch_get_irn_register_req_in(node, i);
                ir_node                   *pred     = get_irn_n(node, i);
-               const arch_register_req_t *pred_req = arch_get_register_req_out(pred);
+               const arch_register_req_t *pred_req = arch_get_irn_register_req(pred);
 
                if (is_Bad(pred)) {
                        ir_fprintf(stderr, "Verify warning: %+F in block %+F(%s) has Bad as input %d\n",
@@ -719,7 +720,7 @@ static void check_input_constraints(ir_node *node)
                                   pred, get_nodes_block(pred), get_irg_dump_name(irg), node);
                        problem_found = 1;
                        continue;
-               } else if (!(reg->type & arch_register_type_joker) && ! arch_reg_is_allocatable(node, i, reg)) {
+               } else if (!arch_reg_is_allocatable(req, reg)) {
                        ir_fprintf(stderr, "Verify warning: Register %s as input %d of %+F not allowed (register constraint) in block %+F(%s)\n",
                                   reg->name, i, node, get_nodes_block(node), get_irg_dump_name(irg));
                        problem_found = 1;
@@ -753,7 +754,7 @@ static void value_used(ir_node *block, ir_node *node)
        const arch_register_t *reg;
        ir_node               *reg_node;
 
-       if (arch_get_irn_reg_class_out(node) != regclass)
+       if (arch_get_irn_reg_class(node) != regclass)
                return;
 
        reg = arch_get_irn_register(node);
@@ -776,7 +777,7 @@ static void value_def(ir_node *node)
        const arch_register_t *reg;
        ir_node               *reg_node;
 
-       if (arch_get_irn_reg_class_out(node) != regclass)
+       if (arch_get_irn_reg_class(node) != regclass)
                return;
 
        reg = arch_get_irn_register(node);
index ab9d2fb..741d5ca 100644 (file)
@@ -177,7 +177,7 @@ ir_node *ia32_new_Fpu_truncate(ir_graph *irg)
 static ir_node *ia32_get_admissible_noreg(ir_node *irn, int pos)
 {
        ir_graph                  *irg = get_irn_irg(irn);
-       const arch_register_req_t *req = arch_get_register_req(irn, pos);
+       const arch_register_req_t *req = arch_get_irn_register_req_in(irn, pos);
 
        assert(req != NULL && "Missing register requirements");
        if (req->cls == &ia32_reg_classes[CLASS_ia32_gp])
@@ -566,7 +566,7 @@ static int ia32_possible_memory_operand(const ir_node *irn, unsigned int i)
                                        /* we can't swap left/right for limited registers
                                         * (As this (currently) breaks constraint handling copies)
                                         */
-                                       req = arch_get_in_register_req(irn, n_ia32_binary_left);
+                                       req = arch_get_irn_register_req_in(irn, n_ia32_binary_left);
                                        if (req->type & arch_register_req_type_limited)
                                                return 0;
                                        break;
index f9a40ac..0622343 100644 (file)
@@ -727,7 +727,7 @@ ir_node *ia32_gen_ASM(ir_node *node)
        for (i = 0; i < out_arity; ++i) {
                info->out_infos[i].req = out_reg_reqs[i];
        }
-       arch_set_in_register_reqs(new_node, in_reg_reqs);
+       arch_set_irn_register_reqs_in(new_node, in_reg_reqs);
 
        SET_IA32_ORIG_NODE(new_node, node);
 
index 25d2f5f..045ea1b 100644 (file)
@@ -137,15 +137,6 @@ static int block_needs_label(const ir_node *block)
        return need_label;
 }
 
-/**
- * Returns the register at in position pos.
- */
-static const arch_register_t *get_in_reg(const ir_node *irn, int pos)
-{
-       ir_node *op = get_irn_n(irn, pos);
-       return arch_get_irn_register(op);
-}
-
 /**
  * Add a number to a prefix. This number will not be used a second time.
  */
@@ -219,7 +210,7 @@ static void emit_register(const arch_register_t *reg, const ir_mode *mode)
 
 void ia32_emit_source_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = get_in_reg(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_in(node, pos);
 
        emit_register(reg, NULL);
 }
@@ -275,13 +266,13 @@ void ia32_emit_8bit_source_register_or_immediate(const ir_node *node, int pos)
                return;
        }
 
-       reg = get_in_reg(node, pos);
+       reg = arch_get_irn_register_in(node, pos);
        emit_8bit_register(reg);
 }
 
 void ia32_emit_8bit_high_source_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg = get_in_reg(node, pos);
+       const arch_register_t *reg = arch_get_irn_register_in(node, pos);
        emit_8bit_register_high(reg);
 }
 
@@ -294,27 +285,27 @@ void ia32_emit_16bit_source_register_or_immediate(const ir_node *node, int pos)
                return;
        }
 
-       reg = get_in_reg(node, pos);
+       reg = arch_get_irn_register_in(node, pos);
        emit_16bit_register(reg);
 }
 
 void ia32_emit_dest_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg  = arch_irn_get_register(node, pos);
+       const arch_register_t *reg  = arch_get_irn_register_out(node, pos);
 
        emit_register(reg, NULL);
 }
 
 void ia32_emit_dest_register_size(const ir_node *node, int pos)
 {
-       const arch_register_t *reg  = arch_irn_get_register(node, pos);
+       const arch_register_t *reg  = arch_get_irn_register_out(node, pos);
 
        emit_register(reg, get_ia32_ls_mode(node));
 }
 
 void ia32_emit_8bit_dest_register(const ir_node *node, int pos)
 {
-       const arch_register_t *reg  = arch_irn_get_register(node, pos);
+       const arch_register_t *reg  = arch_get_irn_register_out(node, pos);
 
        emit_register(reg, mode_Bu);
 }
@@ -426,7 +417,7 @@ void ia32_emit_source_register_or_immediate(const ir_node *node, int pos)
                emit_ia32_Immediate(in);
        } else {
                const ir_mode         *mode = get_ia32_ls_mode(node);
-               const arch_register_t *reg  = get_in_reg(node, pos);
+               const arch_register_t *reg  = arch_get_irn_register_in(node, pos);
                emit_register(reg, mode);
        }
 }
@@ -538,13 +529,13 @@ void ia32_emit_am(const ir_node *node)
 
                /* emit base */
                if (has_base) {
-                       const arch_register_t *reg = get_in_reg(node, n_ia32_base);
+                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_base);
                        emit_register(reg, NULL);
                }
 
                /* emit index + scale */
                if (has_index) {
-                       const arch_register_t *reg = get_in_reg(node, n_ia32_index);
+                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_index);
                        int scale;
                        be_emit_char(',');
                        emit_register(reg, NULL);
@@ -666,7 +657,7 @@ emit_AM:
                        case 'D':
                                if (*fmt < '0' || '9' <= *fmt)
                                        goto unknown;
-                               reg = arch_irn_get_register(node, *fmt++ - '0');
+                               reg = arch_get_irn_register_out(node, *fmt++ - '0');
                                goto emit_R;
 
                        case 'I':
@@ -717,7 +708,7 @@ emit_S:
                                if (is_ia32_Immediate(imm)) {
                                        goto emit_I;
                                } else {
-                                       reg = get_in_reg(node, pos);
+                                       reg = arch_get_irn_register_in(node, pos);
                                        goto emit_R;
                                }
                        }
@@ -816,11 +807,11 @@ void ia32_emit_unop(const ir_node *node, int pos)
 static void emit_ia32_IMul(const ir_node *node)
 {
        ir_node               *left    = get_irn_n(node, n_ia32_IMul_left);
-       const arch_register_t *out_reg = arch_irn_get_register(node, pn_ia32_IMul_res);
+       const arch_register_t *out_reg = arch_get_irn_register_out(node, pn_ia32_IMul_res);
 
        /* do we need the 3-address form? */
        if (is_ia32_NoReg_GP(left) ||
-                       get_in_reg(node, n_ia32_IMul_left) != out_reg) {
+                       arch_get_irn_register_in(node, n_ia32_IMul_left) != out_reg) {
                ia32_emitf(node, "\timul%M %#S4, %#AS3, %#D0\n");
        } else {
                ia32_emitf(node, "\timul%M %#AS4, %#S3\n");
@@ -1007,7 +998,7 @@ static void emit_ia32_Jcc(const ir_node *node)
  */
 static void emit_ia32_Setcc(const ir_node *node)
 {
-       const arch_register_t *dreg = arch_irn_get_register(node, pn_ia32_Setcc_res);
+       const arch_register_t *dreg = arch_get_irn_register_out(node, pn_ia32_Setcc_res);
 
        ia32_condition_code_t cc = get_ia32_condcode(node);
        cc = determine_final_cc(node, n_ia32_Setcc_eflags, cc);
@@ -1029,7 +1020,7 @@ static void emit_ia32_Setcc(const ir_node *node)
 static void emit_ia32_CMovcc(const ir_node *node)
 {
        const ia32_attr_t     *attr = get_ia32_attr_const(node);
-       const arch_register_t *out  = arch_irn_get_register(node, pn_ia32_res);
+       const arch_register_t *out  = arch_get_irn_register_out(node, pn_ia32_res);
        ia32_condition_code_t  cc   = get_ia32_condcode(node);
        const arch_register_t *in_true;
        const arch_register_t *in_false;
@@ -1173,7 +1164,7 @@ static const char* emit_asm_operand(const ir_node *node, const char *s)
 
        /* get register */
        if (asm_reg->use_input == 0) {
-               reg = arch_irn_get_register(node, asm_reg->inout_pos);
+               reg = arch_get_irn_register_out(node, asm_reg->inout_pos);
        } else {
                ir_node *pred = get_irn_n(node, asm_reg->inout_pos);
 
@@ -1182,7 +1173,7 @@ static const char* emit_asm_operand(const ir_node *node, const char *s)
                        emit_ia32_Immediate(pred);
                        return s;
                }
-               reg = get_in_reg(node, asm_reg->inout_pos);
+               reg = arch_get_irn_register_in(node, asm_reg->inout_pos);
        }
        if (reg == NULL) {
                ir_fprintf(stderr,
@@ -1467,10 +1458,10 @@ static void emit_zero(const ir_node* node, const arch_register_t *reg)
 
 static void emit_ia32_Minus64Bit(const ir_node *node)
 {
-       const arch_register_t *in_lo  = get_in_reg(node, 0);
-       const arch_register_t *in_hi  = get_in_reg(node, 1);
-       const arch_register_t *out_lo = arch_irn_get_register(node, 0);
-       const arch_register_t *out_hi = arch_irn_get_register(node, 1);
+       const arch_register_t *in_lo  = arch_get_irn_register_in(node, 0);
+       const arch_register_t *in_hi  = arch_get_irn_register_in(node, 1);
+       const arch_register_t *out_lo = arch_get_irn_register_out(node, 0);
+       const arch_register_t *out_hi = arch_get_irn_register_out(node, 1);
 
        if (out_lo == in_lo) {
                if (out_hi != in_hi) {
@@ -2254,7 +2245,7 @@ static void bemit_binop_with_imm(
                if (get_ia32_op_type(node) == ia32_AddrModeS) {
                        bemit_mod_am(ruval, node);
                } else {
-                       const arch_register_t *reg = get_in_reg(node, n_ia32_binary_left);
+                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_binary_left);
                        bemit_modru(reg, ruval);
                }
                bemit8((unsigned char)attr->offset);
@@ -2266,7 +2257,7 @@ static void bemit_binop_with_imm(
                        bemit8(opcode);
                        bemit_mod_am(ruval, node);
                } else {
-                       const arch_register_t *reg = get_in_reg(node, n_ia32_binary_left);
+                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_binary_left);
                        if (reg->index == REG_GP_EAX) {
                                bemit8(opcode_ax);
                        } else {
@@ -2285,10 +2276,10 @@ static void bemit_binop_with_imm(
  */
 static void bemit_binop_2(const ir_node *node, unsigned code)
 {
-       const arch_register_t *out = get_in_reg(node, n_ia32_binary_left);
+       const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_binary_left);
        bemit8(code);
        if (get_ia32_op_type(node) == ia32_Normal) {
-               const arch_register_t *op2 = get_in_reg(node, n_ia32_binary_right);
+               const arch_register_t *op2 = arch_get_irn_register_in(node, n_ia32_binary_right);
                bemit_modrr(op2, out);
        } else {
                bemit_mod_am(reg_gp_map[out->index], node);
@@ -2315,7 +2306,7 @@ static void bemit_unop(const ir_node *node, unsigned char code, unsigned char ex
 {
        bemit8(code);
        if (get_ia32_op_type(node) == ia32_Normal) {
-               const arch_register_t *in = get_in_reg(node, input);
+               const arch_register_t *in = arch_get_irn_register_in(node, input);
                bemit_modru(in, ext);
        } else {
                bemit_mod_am(ext, node);
@@ -2324,7 +2315,7 @@ static void bemit_unop(const ir_node *node, unsigned char code, unsigned char ex
 
 static void bemit_unop_reg(const ir_node *node, unsigned char code, int input)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
        bemit_unop(node, code, reg_gp_map[out->index], input);
 }
 
@@ -2345,8 +2336,8 @@ static void bemit_immediate(const ir_node *node, bool relative)
 
 static void bemit_copy(const ir_node *copy)
 {
-       const arch_register_t *in  = get_in_reg(copy, 0);
-       const arch_register_t *out = arch_irn_get_register(copy, 0);
+       const arch_register_t *in  = arch_get_irn_register_in(copy, 0);
+       const arch_register_t *out = arch_get_irn_register_out(copy, 0);
 
        if (in == out)
                return;
@@ -2396,14 +2387,14 @@ static void bemit_perm(const ir_node *node)
 
 static void bemit_xor0(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
        bemit8(0x31);
        bemit_modrr(out, out);
 }
 
 static void bemit_mov_const(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
        bemit8(0xB8 + reg_gp_map[out->index]);
        bemit_immediate(node, false);
 }
@@ -2453,7 +2444,7 @@ static void bemit_##op(const ir_node *node) \
                } \
        } else { \
                bemit8(ext << 3 | 1); \
-               bemit_mod_am(reg_gp_map[arch_irn_get_register(val, 0)->index], node); \
+               bemit_mod_am(reg_gp_map[arch_get_irn_register_out(val, 0)->index], node); \
        } \
 } \
  \
@@ -2466,7 +2457,7 @@ static void bemit_##op##8bit(const ir_node *node) \
                bemit8(get_ia32_immediate_attr_const(val)->offset); \
        } else { \
                bemit8(ext << 3); \
-               bemit_mod_am(reg_gp_map[arch_irn_get_register(val, 0)->index], node); \
+               bemit_mod_am(reg_gp_map[arch_get_irn_register_out(val, 0)->index], node); \
        } \
 }
 
@@ -2498,7 +2489,7 @@ UNOP(ijmp,    0xFF, 4, n_ia32_IJmp_target)
 #define SHIFT(op, ext) \
 static void bemit_##op(const ir_node *node) \
 { \
-       const arch_register_t *out   = arch_irn_get_register(node, 0); \
+       const arch_register_t *out   = arch_get_irn_register_out(node, 0); \
        ir_node               *count = get_irn_n(node, 1); \
        if (is_ia32_Immediate(count)) { \
                int offset = get_ia32_immediate_attr_const(count)->offset; \
@@ -2547,8 +2538,8 @@ SHIFT(sar, 7)
 
 static void bemit_shld(const ir_node *node)
 {
-       const arch_register_t *in  = get_in_reg(node, n_ia32_ShlD_val_low);
-       const arch_register_t *out = arch_irn_get_register(node, pn_ia32_ShlD_res);
+       const arch_register_t *in  = arch_get_irn_register_in(node, n_ia32_ShlD_val_low);
+       const arch_register_t *out = arch_get_irn_register_out(node, pn_ia32_ShlD_res);
        ir_node *count = get_irn_n(node, n_ia32_ShlD_count);
        bemit8(0x0F);
        if (is_ia32_Immediate(count)) {
@@ -2563,8 +2554,8 @@ static void bemit_shld(const ir_node *node)
 
 static void bemit_shrd(const ir_node *node)
 {
-       const arch_register_t *in  = get_in_reg(node, n_ia32_ShrD_val_low);
-       const arch_register_t *out = arch_irn_get_register(node, pn_ia32_ShrD_res);
+       const arch_register_t *in  = arch_get_irn_register_in(node, n_ia32_ShrD_val_low);
+       const arch_register_t *out = arch_get_irn_register_out(node, pn_ia32_ShrD_res);
        ir_node *count = get_irn_n(node, n_ia32_ShrD_count);
        bemit8(0x0F);
        if (is_ia32_Immediate(count)) {
@@ -2582,7 +2573,7 @@ static void bemit_shrd(const ir_node *node)
  */
 static void bemit_setcc(const ir_node *node)
 {
-       const arch_register_t *dreg = arch_irn_get_register(node, pn_ia32_Setcc_res);
+       const arch_register_t *dreg = arch_get_irn_register_out(node, pn_ia32_Setcc_res);
 
        ia32_condition_code_t cc = get_ia32_condcode(node);
        cc = determine_final_cc(node, n_ia32_Setcc_eflags, cc);
@@ -2628,7 +2619,7 @@ static void bemit_cmovcc(const ir_node *node)
 {
        const ia32_attr_t     *attr         = get_ia32_attr_const(node);
        int                    ins_permuted = attr->data.ins_permuted;
-       const arch_register_t *out          = arch_irn_get_register(node, pn_ia32_res);
+       const arch_register_t *out          = arch_get_irn_register_out(node, pn_ia32_res);
        ia32_condition_code_t  cc           = get_ia32_condcode(node);
        const arch_register_t *in_true;
        const arch_register_t *in_false;
@@ -2695,7 +2686,7 @@ static void bemit_cmp(const ir_node *node)
                                if (get_ia32_op_type(node) == ia32_AddrModeS) {
                                        bemit_mod_am(7, node);
                                } else {
-                                       const arch_register_t *reg = get_in_reg(node, n_ia32_binary_left);
+                                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_binary_left);
                                        bemit_modru(reg, 7);
                                }
                                bemit8((unsigned char)attr->offset);
@@ -2707,7 +2698,7 @@ static void bemit_cmp(const ir_node *node)
                                        bemit8(0x81);
                                        bemit_mod_am(7, node);
                                } else {
-                                       const arch_register_t *reg = get_in_reg(node, n_ia32_binary_left);
+                                       const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_binary_left);
                                        if (reg->index == REG_GP_EAX) {
                                                bemit8(0x3D);
                                        } else {
@@ -2724,10 +2715,10 @@ static void bemit_cmp(const ir_node *node)
                }
                panic("invalid imm size?!?");
        } else {
-               const arch_register_t *out = get_in_reg(node, n_ia32_binary_left);
+               const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_binary_left);
                bemit8(0x3B);
                if (get_ia32_op_type(node) == ia32_Normal) {
-                       const arch_register_t *op2 = get_in_reg(node, n_ia32_binary_right);
+                       const arch_register_t *op2 = arch_get_irn_register_in(node, n_ia32_binary_right);
                        bemit_modrr(op2, out);
                } else {
                        bemit_mod_am(reg_gp_map[out->index], node);
@@ -2740,7 +2731,7 @@ static void bemit_cmp8bit(const ir_node *node)
        ir_node *right = get_irn_n(node, n_ia32_binary_right);
        if (is_ia32_Immediate(right)) {
                if (get_ia32_op_type(node) == ia32_Normal) {
-                       const arch_register_t *out = get_in_reg(node, n_ia32_Cmp_left);
+                       const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_Cmp_left);
                        if (out->index == REG_GP_EAX) {
                                bemit8(0x3C);
                        } else {
@@ -2753,10 +2744,10 @@ static void bemit_cmp8bit(const ir_node *node)
                }
                bemit8(get_ia32_immediate_attr_const(right)->offset);
        } else {
-               const arch_register_t *out = get_in_reg(node, n_ia32_Cmp_left);
+               const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_Cmp_left);
                bemit8(0x3A);
                if (get_ia32_op_type(node) == ia32_Normal) {
-                       const arch_register_t *in = get_in_reg(node, n_ia32_Cmp_right);
+                       const arch_register_t *in = arch_get_irn_register_in(node, n_ia32_Cmp_right);
                        bemit_modrr(out, in);
                } else {
                        bemit_mod_am(reg_gp_map[out->index], node);
@@ -2769,7 +2760,7 @@ static void bemit_test8bit(const ir_node *node)
        ir_node *right = get_irn_n(node, n_ia32_Test8Bit_right);
        if (is_ia32_Immediate(right)) {
                if (get_ia32_op_type(node) == ia32_Normal) {
-                       const arch_register_t *out = get_in_reg(node, n_ia32_Test8Bit_left);
+                       const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_Test8Bit_left);
                        if (out->index == REG_GP_EAX) {
                                bemit8(0xA8);
                        } else {
@@ -2782,10 +2773,10 @@ static void bemit_test8bit(const ir_node *node)
                }
                bemit8(get_ia32_immediate_attr_const(right)->offset);
        } else {
-               const arch_register_t *out = get_in_reg(node, n_ia32_Test8Bit_left);
+               const arch_register_t *out = arch_get_irn_register_in(node, n_ia32_Test8Bit_left);
                bemit8(0x84);
                if (get_ia32_op_type(node) == ia32_Normal) {
-                       const arch_register_t *in = get_in_reg(node, n_ia32_Test8Bit_right);
+                       const arch_register_t *in = arch_get_irn_register_in(node, n_ia32_Test8Bit_right);
                        bemit_modrr(out, in);
                } else {
                        bemit_mod_am(reg_gp_map[out->index], node);
@@ -2814,13 +2805,13 @@ static void bemit_imul(const ir_node *node)
 
 static void bemit_dec(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, pn_ia32_Dec_res);
+       const arch_register_t *out = arch_get_irn_register_out(node, pn_ia32_Dec_res);
        bemit8(0x48 + reg_gp_map[out->index]);
 }
 
 static void bemit_inc(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, pn_ia32_Inc_res);
+       const arch_register_t *out = arch_get_irn_register_out(node, pn_ia32_Inc_res);
        bemit8(0x40 + reg_gp_map[out->index]);
 }
 
@@ -2837,7 +2828,7 @@ UNOPMEM(decmem, 0xFE, 1)
 
 static void bemit_ldtls(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
 
        bemit8(0x65); // gs:
        if (out->index == REG_GP_EAX) {
@@ -2854,7 +2845,7 @@ static void bemit_ldtls(const ir_node *node)
  */
 static void bemit_lea(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
        bemit8(0x8D);
        bemit_mod_am(reg_gp_map[out->index], node);
 }
@@ -2910,10 +2901,10 @@ static void bemit_helper_zero(const arch_register_t *reg)
 
 static void bemit_minus64bit(const ir_node *node)
 {
-       const arch_register_t *in_lo  = get_in_reg(node, 0);
-       const arch_register_t *in_hi  = get_in_reg(node, 1);
-       const arch_register_t *out_lo = arch_irn_get_register(node, 0);
-       const arch_register_t *out_hi = arch_irn_get_register(node, 1);
+       const arch_register_t *in_lo  = arch_get_irn_register_in(node, 0);
+       const arch_register_t *in_hi  = arch_get_irn_register_in(node, 1);
+       const arch_register_t *out_lo = arch_get_irn_register_out(node, 0);
+       const arch_register_t *out_hi = arch_get_irn_register_out(node, 1);
 
        if (out_lo == in_lo) {
                if (out_hi != in_hi) {
@@ -2999,7 +2990,7 @@ EMIT_SINGLEOP(stc,   0xF9)
  */
 static void bemit_load(const ir_node *node)
 {
-       const arch_register_t *out = arch_irn_get_register(node, 0);
+       const arch_register_t *out = arch_get_irn_register_out(node, 0);
 
        if (out->index == REG_GP_EAX) {
                ir_node   *base      = get_irn_n(node, n_ia32_base);
@@ -3044,7 +3035,7 @@ static void bemit_store(const ir_node *node)
                        bemit_immediate(value, false);
                }
        } else {
-               const arch_register_t *in = get_in_reg(node, n_ia32_Store_val);
+               const arch_register_t *in = arch_get_irn_register_in(node, n_ia32_Store_val);
 
                if (in->index == REG_GP_EAX) {
                        ir_node   *base      = get_irn_n(node, n_ia32_base);
@@ -3123,7 +3114,7 @@ static void bemit_push(const ir_node *node)
                bemit8(0xFF);
                bemit_mod_am(6, node);
        } else {
-               const arch_register_t *reg = get_in_reg(node, n_ia32_Push_val);
+               const arch_register_t *reg = arch_get_irn_register_in(node, n_ia32_Push_val);
                bemit8(0x50 + reg_gp_map[reg->index]);
        }
 }
@@ -3133,7 +3124,7 @@ static void bemit_push(const ir_node *node)
  */
 static void bemit_pop(const ir_node *node)
 {
-       const arch_register_t *reg = arch_irn_get_register(node, pn_ia32_Pop_res);
+       const arch_register_t *reg = arch_get_irn_register_out(node, pn_ia32_Pop_res);
        bemit8(0x58 + reg_gp_map[reg->index]);
 }
 
@@ -3272,7 +3263,7 @@ static void bemit_subsp(const ir_node *node)
        bemit_sub(node);
        /* mov %esp, %out */
        bemit8(0x8B);
-       out = arch_irn_get_register(node, 1);
+       out = arch_get_irn_register_out(node, 1);
        bemit8(MOD_REG | ENC_REG(reg_gp_map[out->index]) | ENC_RM(0x04));
 }
 
@@ -3297,7 +3288,7 @@ static void bemit_incsp(const ir_node *node)
        size = get_signed_imm_size(offs);
        bemit8(size == 1 ? 0x83 : 0x81);
 
-       reg  = arch_irn_get_register(node, 0);
+       reg  = arch_get_irn_register_out(node, 0);
        bemit_modru(reg, ext);
 
        if (size == 1) {
index a7d8089..fc0db4f 100644 (file)
@@ -73,7 +73,7 @@ static void ia32_transform_sub_to_neg_add(ir_node *irn)
        in2      = get_irn_n(irn, n_ia32_binary_right);
        in1_reg  = arch_get_irn_register(in1);
        in2_reg  = arch_get_irn_register(in2);
-       out_reg  = arch_irn_get_register(irn, 0);
+       out_reg  = arch_get_irn_register_out(irn, 0);
 
        if (out_reg == in1_reg)
                return;
@@ -249,7 +249,7 @@ static void assure_should_be_same_requirements(ir_node *node)
        int                         n_res, i;
        ir_node                    *in_node, *block;
 
-       n_res = arch_irn_get_n_outs(node);
+       n_res = arch_get_irn_n_outs(node);
        block = get_nodes_block(node);
 
        /* check all OUT requirements, if there is a should_be_same */
@@ -257,7 +257,7 @@ static void assure_should_be_same_requirements(ir_node *node)
                int                          i2, arity;
                int                          same_pos;
                ir_node                     *uses_out_reg;
-               const arch_register_req_t   *req = arch_get_out_register_req(node, i);
+               const arch_register_req_t   *req = arch_get_irn_register_req_out(node, i);
                const arch_register_class_t *cls;
                int                         uses_out_reg_pos;
 
@@ -267,7 +267,7 @@ static void assure_should_be_same_requirements(ir_node *node)
                same_pos = get_first_same(req);
 
                /* get in and out register */
-               out_reg = arch_irn_get_register(node, i);
+               out_reg = arch_get_irn_register_out(node, i);
                in_node = get_irn_n(node, same_pos);
                in_reg  = arch_get_irn_register(in_node);
 
@@ -357,10 +357,10 @@ static void fix_am_source(ir_node *irn)
        if (get_ia32_am_support(irn) != ia32_am_binary)
                return;
 
-       n_res = arch_irn_get_n_outs(irn);
+       n_res = arch_get_irn_n_outs(irn);
 
        for (i = 0; i < n_res; i++) {
-               const arch_register_req_t *req = arch_get_out_register_req(irn, i);
+               const arch_register_req_t *req = arch_get_irn_register_req_out(irn, i);
                const arch_register_t     *out_reg;
                int                        same_pos;
                ir_node                   *same_node;
@@ -371,7 +371,7 @@ static void fix_am_source(ir_node *irn)
                        continue;
 
                /* get in and out register */
-               out_reg   = arch_irn_get_register(irn, i);
+               out_reg   = arch_get_irn_register_out(irn, i);
                same_pos  = get_first_same(req);
                same_node = get_irn_n(irn, same_pos);
                same_reg  = arch_get_irn_register(same_node);
index def6e5f..31deea5 100644 (file)
@@ -832,8 +832,8 @@ static void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags,
        ia32_attr_t     *attr = get_ia32_attr(node);
        backend_info_t  *info;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
 
        attr->exec_units  = execution_units;
 #ifndef NDEBUG
index 65699a0..29a5f5f 100644 (file)
@@ -186,8 +186,8 @@ static void peephole_ia32_Cmp(ir_node *const node)
        }
        set_ia32_ls_mode(test, get_ia32_ls_mode(node));
 
-       reg = arch_irn_get_register(node, pn_ia32_Cmp_eflags);
-       arch_irn_set_register(test, pn_ia32_Test_eflags, reg);
+       reg = arch_get_irn_register_out(node, pn_ia32_Cmp_eflags);
+       arch_set_irn_register_out(test, pn_ia32_Test_eflags, reg);
 
        foreach_out_edge_safe(node, edge, tmp) {
                ir_node *const user = get_edge_src_irn(edge);
@@ -765,7 +765,7 @@ static void peephole_Load_IncSP_to_pop(ir_node *irn)
                if (loads[loadslot] != NULL)
                        break;
 
-               dreg = arch_irn_get_register(node, pn_ia32_Load_res);
+               dreg = arch_get_irn_register_out(node, pn_ia32_Load_res);
                if (regmask & (1 << dreg->index)) {
                        /* this register is already used */
                        break;
@@ -806,10 +806,10 @@ static void peephole_Load_IncSP_to_pop(ir_node *irn)
                const arch_register_t *reg;
 
                mem = get_irn_n(load, n_ia32_mem);
-               reg = arch_irn_get_register(load, pn_ia32_Load_res);
+               reg = arch_get_irn_register_out(load, pn_ia32_Load_res);
 
                pop = new_bd_ia32_Pop(get_irn_dbg_info(load), block, mem, pred_sp);
-               arch_irn_set_register(pop, pn_ia32_Load_res, reg);
+               arch_set_irn_register_out(pop, pn_ia32_Load_res, reg);
 
                copy_mark(load, pop);
 
@@ -1249,7 +1249,7 @@ static void peephole_ia32_Conv_I2I(ir_node *node)
        if (get_mode_size_bits(smaller_mode) != 16 ||
                        !mode_is_signed(smaller_mode)          ||
                        eax != arch_get_irn_register(val)      ||
-                       eax != arch_irn_get_register(node, pn_ia32_Conv_I2I_res))
+                       eax != arch_get_irn_register_out(node, pn_ia32_Conv_I2I_res))
                return;
 
        dbgi  = get_irn_dbg_info(node);
@@ -1439,9 +1439,9 @@ static void optimize_conv_conv(ir_node *node)
 
                        /* Argh:We must change the opcode to 8bit AND copy the register constraints */
                        if (get_mode_size_bits(conv_mode) == 8) {
+                               const arch_register_req_t **reqs = arch_get_irn_register_reqs_in(node);
                                set_irn_op(pred, op_ia32_Conv_I2I8Bit);
-                               arch_set_in_register_reqs(pred,
-                                                         arch_get_in_register_reqs(node));
+                               arch_set_irn_register_reqs_in(pred, reqs);
                        }
                } else {
                        /* we don't want to end up with 2 loads, so we better do nothing */
@@ -1454,9 +1454,9 @@ static void optimize_conv_conv(ir_node *node)
 
                        /* Argh:We must change the opcode to 8bit AND copy the register constraints */
                        if (get_mode_size_bits(conv_mode) == 8) {
+                               const arch_register_req_t **reqs = arch_get_irn_register_reqs_in(node);
                                set_irn_op(result_conv, op_ia32_Conv_I2I8Bit);
-                               arch_set_in_register_reqs(result_conv,
-                                                         arch_get_in_register_reqs(node));
+                               arch_set_irn_register_reqs_in(result_conv, reqs);
                        }
                }
        } else {
index 0814f6c..6715190 100644 (file)
@@ -139,7 +139,7 @@ sub ia32_custom_init_attr {
        my $res    = "";
 
        if(defined($node->{modified_flags})) {
-               $res .= "\tarch_irn_add_flags(res, arch_irn_flags_modify_flags);\n";
+               $res .= "\tarch_add_irn_flags(res, arch_irn_flags_modify_flags);\n";
        }
        if(defined($node->{am})) {
                my $am = $node->{am};
@@ -988,7 +988,7 @@ Setcc => {
        # (when we emit the setX; setp; orb and the setX;setnp;andb sequences)
        init_attr => "set_ia32_ls_mode(res, mode_Bu);\n"
                . "\tif (condition_code & ia32_cc_additional_float_cases) {\n"
-               . "\t\tarch_irn_add_flags(res, arch_irn_flags_modify_flags);\n"
+               . "\t\tarch_add_irn_flags(res, arch_irn_flags_modify_flags);\n"
                . "\t\t/* attr->latency = 3; */\n"
                . "\t}\n",
        latency   => 1,
index 53d0191..b1d7d6c 100644 (file)
@@ -292,7 +292,7 @@ static ir_node *gen_Const(ir_node *node)
                                                             mode);
                                set_ia32_op_type(load, ia32_AddrModeS);
                                set_ia32_am_sc(load, floatent);
-                               arch_irn_add_flags(load, arch_irn_flags_rematerializable);
+                               arch_add_irn_flags(load, arch_irn_flags_rematerializable);
                                res = new_r_Proj(load, mode_xmm, pn_ia32_xLoad_res);
                        }
                } else {
@@ -317,7 +317,7 @@ static ir_node *gen_Const(ir_node *node)
                                                            ls_mode);
                                set_ia32_op_type(load, ia32_AddrModeS);
                                set_ia32_am_sc(load, floatent);
-                               arch_irn_add_flags(load, arch_irn_flags_rematerializable);
+                               arch_add_irn_flags(load, arch_irn_flags_rematerializable);
                                res = new_r_Proj(load, mode_vfp, pn_ia32_vfld_res);
                        }
                }
@@ -2245,7 +2245,7 @@ static ir_node *gen_Load(ir_node *node)
                assert((int)pn_ia32_xLoad_res == (int)pn_ia32_vfld_res
                                && (int)pn_ia32_vfld_res == (int)pn_ia32_Load_res
                                && (int)pn_ia32_Load_res == (int)pn_ia32_res);
-               arch_irn_add_flags(new_node, arch_irn_flags_rematerializable);
+               arch_add_irn_flags(new_node, arch_irn_flags_rematerializable);
        }
 
        SET_IA32_ORIG_NODE(new_node, node);
@@ -4142,8 +4142,8 @@ static ir_node *gen_be_AddSP(ir_node *node)
        ir_node *new_node = gen_binop(node, sp, sz, new_bd_ia32_SubSP,
                                      match_am | match_immediate);
        assert(is_ia32_SubSP(new_node));
-       arch_irn_set_register(new_node, pn_ia32_SubSP_stack,
-                             &ia32_registers[REG_ESP]);
+       arch_set_irn_register_out(new_node, pn_ia32_SubSP_stack,
+                                 &ia32_registers[REG_ESP]);
        return new_node;
 }
 
@@ -4158,8 +4158,8 @@ static ir_node *gen_be_SubSP(ir_node *node)
        ir_node *new_node = gen_binop(node, sp, sz, new_bd_ia32_AddSP,
                                      match_am | match_immediate);
        assert(is_ia32_AddSP(new_node));
-       arch_irn_set_register(new_node, pn_ia32_AddSP_stack,
-                             &ia32_registers[REG_ESP]);
+       arch_set_irn_register_out(new_node, pn_ia32_AddSP_stack,
+                                 &ia32_registers[REG_ESP]);
        return new_node;
 }
 
@@ -4200,7 +4200,7 @@ static ir_node *gen_Phi(ir_node *node)
        copy_node_attr(irg, node, phi);
        be_duplicate_deps(node, phi);
 
-       arch_set_out_register_req(phi, 0, req);
+       arch_set_irn_register_req_out(phi, 0, req);
 
        be_enqueue_preds(node);
 
@@ -4842,7 +4842,8 @@ static ir_node *gen_be_Call(ir_node *node)
        i    = get_irn_arity(node) - 1;
        fpcw = be_transform_node(get_irn_n(node, i--));
        for (; i >= n_be_Call_first_arg; --i) {
-               arch_register_req_t const *const req = arch_get_register_req(node, i);
+               arch_register_req_t const *const req
+                       = arch_get_irn_register_req_in(node, i);
                ir_node *const reg_parm = be_transform_node(get_irn_n(node, i));
 
                assert(req->type == arch_register_req_type_limited);
@@ -4938,7 +4939,7 @@ static ir_node *gen_return_address(ir_node *node)
                assert((int)pn_ia32_xLoad_res == (int)pn_ia32_vfld_res
                                && (int)pn_ia32_vfld_res == (int)pn_ia32_Load_res
                                && (int)pn_ia32_Load_res == (int)pn_ia32_res);
-               arch_irn_add_flags(load, arch_irn_flags_rematerializable);
+               arch_add_irn_flags(load, arch_irn_flags_rematerializable);
        }
 
        SET_IA32_ORIG_NODE(load, node);
@@ -4989,7 +4990,7 @@ static ir_node *gen_frame_address(ir_node *node)
                assert((int)pn_ia32_xLoad_res == (int)pn_ia32_vfld_res
                                && (int)pn_ia32_vfld_res == (int)pn_ia32_Load_res
                                && (int)pn_ia32_Load_res == (int)pn_ia32_res);
-               arch_irn_add_flags(load, arch_irn_flags_rematerializable);
+               arch_add_irn_flags(load, arch_irn_flags_rematerializable);
        }
 
        SET_IA32_ORIG_NODE(load, node);
@@ -5574,7 +5575,7 @@ static ir_node *gen_Proj_Builtin(ir_node *proj)
 static ir_node *gen_be_IncSP(ir_node *node)
 {
        ir_node *res = be_duplicate_node(node);
-       arch_irn_add_flags(res, arch_irn_flags_modify_flags);
+       arch_add_irn_flags(res, arch_irn_flags_modify_flags);
 
        return res;
 }
@@ -5596,7 +5597,7 @@ static ir_node *gen_Proj_be_Call(ir_node *node)
        }
        /* transform call modes */
        if (mode_is_data(mode)) {
-               const arch_register_class_t *cls = arch_get_irn_reg_class_out(node);
+               const arch_register_class_t *cls = arch_get_irn_reg_class(node);
                mode = cls->mode;
        }
 
@@ -5610,8 +5611,8 @@ static ir_node *gen_Proj_be_Call(ir_node *node)
        } else if (proj == pn_be_Call_X_regular) {
                proj = pn_ia32_Call_X_regular;
        } else {
-               arch_register_req_t const *const req    = arch_get_register_req_out(node);
-               int                        const n_outs = arch_irn_get_n_outs(new_call);
+               arch_register_req_t const *const req    = arch_get_irn_register_req(node);
+               int                        const n_outs = arch_get_irn_n_outs(new_call);
                int                              i;
 
                assert(proj      >= pn_be_Call_first_res);
@@ -5619,7 +5620,7 @@ static ir_node *gen_Proj_be_Call(ir_node *node)
 
                for (i = 0; i < n_outs; ++i) {
                        arch_register_req_t const *const new_req
-                               = arch_get_out_register_req(new_call, i);
+                               = arch_get_irn_register_req_out(new_call, i);
 
                        if (!(new_req->type & arch_register_req_type_limited) ||
                            new_req->cls      != req->cls                     ||
@@ -5666,7 +5667,7 @@ static ir_node *gen_Proj_ASM(ir_node *node)
        long     pos      = get_Proj_proj(node);
 
        if (mode == mode_M) {
-               pos = arch_irn_get_n_outs(new_pred)-1;
+               pos = arch_get_irn_n_outs(new_pred)-1;
        } else if (mode_is_int(mode) || mode_is_reference(mode)) {
                mode = mode_Iu;
        } else if (mode_is_float(mode)) {
index 4457de1..3977b94 100644 (file)
@@ -454,7 +454,7 @@ static inline const arch_register_t *x87_get_irn_register(const ir_node *irn)
 static inline const arch_register_t *x87_irn_get_register(const ir_node *irn,
                                                           int pos)
 {
-       const arch_register_t *res = arch_irn_get_register(irn, pos);
+       const arch_register_t *res = arch_get_irn_register_out(irn, pos);
 
        assert(res->reg_class == &ia32_reg_classes[CLASS_ia32_vfp]);
        return res;
@@ -1767,7 +1767,7 @@ static int sim_Copy(x87_state *state, ir_node *n)
        int                         op1_idx, out_idx;
        unsigned                    live;
 
-       cls = arch_get_irn_reg_class_out(n);
+       cls = arch_get_irn_reg_class(n);
        if (cls != &ia32_reg_classes[CLASS_ia32_vfp])
                return 0;
 
index 4a24243..d476b90 100644 (file)
@@ -145,12 +145,12 @@ static void sparc_prepare_graph(ir_graph *irg)
 
 static bool sparc_modifies_flags(const ir_node *node)
 {
-       return arch_irn_get_flags(node) & sparc_arch_irn_flag_modifies_flags;
+       return arch_get_irn_flags(node) & sparc_arch_irn_flag_modifies_flags;
 }
 
 static bool sparc_modifies_fp_flags(const ir_node *node)
 {
-       return arch_irn_get_flags(node) & sparc_arch_irn_flag_modifies_fp_flags;
+       return arch_get_irn_flags(node) & sparc_arch_irn_flag_modifies_fp_flags;
 }
 
 static void sparc_before_ra(ir_graph *irg)
index 8cb6615..2be5cc9 100644 (file)
@@ -458,7 +458,7 @@ static void sparc_collect_frame_entity_nodes(ir_node *node, void *data)
                return;
        if (!attr->is_frame_entity)
                return;
-       if (arch_irn_get_flags(node) & sparc_arch_irn_flag_needs_64bit_spillslot)
+       if (arch_get_irn_flags(node) & sparc_arch_irn_flag_needs_64bit_spillslot)
                mode = mode_Lu;
        align  = get_mode_size_bytes(mode);
        be_node_needs_frame_entity(env, node, mode, align);
index a5ef74d..558872e 100644 (file)
@@ -145,7 +145,7 @@ static void sparc_set_attr_imm(ir_node *res, ir_entity *entity,
        sparc_attr_t *attr           = (sparc_attr_t*)get_irn_generic_attr(res);
        attr->immediate_value_entity = entity;
        attr->immediate_value        = immediate_value;
-       arch_irn_add_flags(res, (arch_irn_flags_t)sparc_arch_irn_flag_immediate_form);
+       arch_add_irn_flags(res, (arch_irn_flags_t)sparc_arch_irn_flag_immediate_form);
 }
 
 static void init_sparc_jmp_cond_attr(ir_node *node, ir_relation relation,
@@ -241,8 +241,8 @@ static void init_sparc_attributes(ir_node *node, arch_irn_flags_t flags,
        backend_info_t  *info;
        (void) execution_units;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
 
        info            = be_get_info(node);
        info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res);
index 4de1ed0..da7be55 100644 (file)
@@ -520,7 +520,7 @@ Call => {
                imm => {
                        attr       => "ir_entity *entity, int32_t offset, bool aggregate_return",
                        custominit => "\tsparc_set_attr_imm(res, entity, offset);".
-                                     "\tif (aggregate_return) arch_irn_add_flags(res, sparc_arch_irn_flag_aggregate_return);",
+                                     "\tif (aggregate_return) arch_add_irn_flags(res, sparc_arch_irn_flag_aggregate_return);",
                        arity     => "variable",
                        out_arity => "variable",
                },
@@ -528,7 +528,7 @@ Call => {
                        attr       => "bool aggregate_return",
                        arity      => "variable",
                        out_arity  => "variable",
-                       custominit => "\tif (aggregate_return) arch_irn_add_flags(res, sparc_arch_irn_flag_aggregate_return);",
+                       custominit => "\tif (aggregate_return) arch_add_irn_flags(res, sparc_arch_irn_flag_aggregate_return);",
                }
        },
 },
index 32babd0..269ab79 100644 (file)
@@ -1376,30 +1376,30 @@ static ir_node *gen_Start(ir_node *node)
 
        /* first output is memory */
        start_mem_offset = o;
-       arch_set_out_register_req(start, o, arch_no_register_req);
+       arch_set_irn_register_req_out(start, o, arch_no_register_req);
        ++o;
 
        /* the zero register */
        start_g0_offset = o;
        req = be_create_reg_req(obst, &sparc_registers[REG_G0],
                                arch_register_req_type_ignore);
-       arch_set_out_register_req(start, o, req);
-       arch_irn_set_register(start, o, &sparc_registers[REG_G0]);
+       arch_set_irn_register_req_out(start, o, req);
+       arch_set_irn_register_out(start, o, &sparc_registers[REG_G0]);
        ++o;
 
        /* we need an output for the stackpointer */
        start_sp_offset = o;
        req = be_create_reg_req(obst, sp_reg,
                        arch_register_req_type_produces_sp | arch_register_req_type_ignore);
-       arch_set_out_register_req(start, o, req);
-       arch_irn_set_register(start, o, sp_reg);
+       arch_set_irn_register_req_out(start, o, req);
+       arch_set_irn_register_out(start, o, sp_reg);
        ++o;
 
        if (!current_cconv->omit_fp) {
                start_fp_offset = o;
                req = be_create_reg_req(obst, fp_reg, arch_register_req_type_ignore);
-               arch_set_out_register_req(start, o, req);
-               arch_irn_set_register(start, o, fp_reg);
+               arch_set_irn_register_req_out(start, o, req);
+               arch_set_irn_register_out(start, o, fp_reg);
                ++o;
        }
 
@@ -1410,13 +1410,13 @@ static ir_node *gen_Start(ir_node *node)
                const arch_register_t    *reg0  = param->reg0;
                const arch_register_t    *reg1  = param->reg1;
                if (reg0 != NULL) {
-                       arch_set_out_register_req(start, o, reg0->single_req);
-                       arch_irn_set_register(start, o, reg0);
+                       arch_set_irn_register_req_out(start, o, reg0->single_req);
+                       arch_set_irn_register_out(start, o, reg0);
                        ++o;
                }
                if (reg1 != NULL) {
-                       arch_set_out_register_req(start, o, reg1->single_req);
-                       arch_irn_set_register(start, o, reg1);
+                       arch_set_irn_register_req_out(start, o, reg1->single_req);
+                       arch_set_irn_register_out(start, o, reg1);
                        ++o;
                }
        }
@@ -1428,8 +1428,8 @@ static ir_node *gen_Start(ir_node *node)
                size_t c;
                for (c = 0; c < n_callee_saves; ++c) {
                        const arch_register_t *reg = omit_fp_callee_saves[c];
-                       arch_set_out_register_req(start, o, reg->single_req);
-                       arch_irn_set_register(start, o, reg);
+                       arch_set_irn_register_req_out(start, o, reg->single_req);
+                       arch_set_irn_register_out(start, o, reg);
                        ++o;
                }
        }
@@ -1552,7 +1552,7 @@ static ir_node *gen_Return(ir_node *node)
        assert(p == n_ins);
 
        bereturn = new_bd_sparc_Return_reg(dbgi, new_block, n_ins, in);
-       arch_set_in_register_reqs(bereturn, reqs);
+       arch_set_irn_register_reqs_in(bereturn, reqs);
 
        return bereturn;
 }
@@ -1612,8 +1612,8 @@ static void bitcast_float_to_int(dbg_info *dbgi, ir_node *block,
                set_irn_pinned(ld, op_pin_state_floats);
                result[1] = new_r_Proj(ld2, mode_gp, pn_sparc_Ld_res);
 
-               arch_irn_add_flags(ld, (arch_irn_flags_t)sparc_arch_irn_flag_needs_64bit_spillslot);
-               arch_irn_add_flags(ld2, (arch_irn_flags_t)sparc_arch_irn_flag_needs_64bit_spillslot);
+               arch_add_irn_flags(ld, (arch_irn_flags_t)sparc_arch_irn_flag_needs_64bit_spillslot);
+               arch_add_irn_flags(ld2, (arch_irn_flags_t)sparc_arch_irn_flag_needs_64bit_spillslot);
        } else {
                assert(bits == 32);
                result[1] = NULL;
@@ -1768,17 +1768,17 @@ static ir_node *gen_Call(ir_node *node)
                res = new_bd_sparc_Call_reg(dbgi, new_block, in_arity, in, out_arity,
                                            aggregate_return);
        }
-       arch_set_in_register_reqs(res, in_req);
+       arch_set_irn_register_reqs_in(res, in_req);
 
        /* create output register reqs */
        o = 0;
-       arch_set_out_register_req(res, o++, arch_no_register_req);
+       arch_set_irn_register_req_out(res, o++, arch_no_register_req);
        /* add register requirements for the result regs */
        for (r = 0; r < n_ress; ++r) {
                const reg_or_stackslot_t  *result_info = &cconv->results[r];
                const arch_register_req_t *req         = result_info->req0;
                if (req != NULL) {
-                       arch_set_out_register_req(res, o++, req);
+                       arch_set_irn_register_req_out(res, o++, req);
                }
                assert(result_info->req1 == NULL);
        }
@@ -1787,7 +1787,7 @@ static ir_node *gen_Call(ir_node *node)
                if (!rbitset_is_set(cconv->caller_saves, i))
                        continue;
                reg = &sparc_registers[i];
-               arch_set_out_register_req(res, o++, reg->single_req);
+               arch_set_irn_register_req_out(res, o++, reg->single_req);
        }
        assert(o == out_arity);
 
@@ -1895,7 +1895,7 @@ static ir_node *gen_Phi(ir_node *node)
        phi = new_ir_node(dbgi, irg, block, op_Phi, mode, get_irn_arity(node), get_irn_in(node) + 1);
        copy_node_attr(irg, node, phi);
        be_duplicate_deps(node, phi);
-       arch_set_out_register_req(phi, 0, req);
+       arch_set_irn_register_req_out(phi, 0, req);
        be_enqueue_preds(node);
        return phi;
 }