avoid unnecessary passing around of arch_env_t* in backend APIs
[libfirm] / ir / be / benode.c
index 46cf340..3383f38 100644 (file)
@@ -37,7 +37,6 @@
 #include "util.h"
 #include "debug.h"
 #include "fourcc.h"
-#include "offset.h"
 #include "bitfiddle.h"
 #include "raw_bitset.h"
 #include "error.h"
@@ -236,7 +235,7 @@ static int Call_cmp_attr(ir_node *a, ir_node *b)
 static arch_register_req_t *allocate_reg_req(const ir_node *node)
 {
        ir_graph       *irg  = get_irn_irg(node);
-       struct obstack *obst = be_get_birg_obst(irg);
+       struct obstack *obst = be_get_be_obst(irg);
 
        arch_register_req_t *req = obstack_alloc(obst, sizeof(*req));
        memset(req, 0, sizeof(*req));
@@ -263,7 +262,7 @@ void be_set_constr_out(ir_node *node, int pos, const arch_register_req_t *req)
 static void *init_node_attr(ir_node *node, int n_inputs, int n_outputs)
 {
        ir_graph       *irg  = get_irn_irg(node);
-       struct obstack *obst = be_get_birg_obst(irg);
+       struct obstack *obst = be_get_be_obst(irg);
        be_node_attr_t *a    = get_irn_attr(node);
        backend_info_t *info = be_get_info(node);
 
@@ -442,9 +441,10 @@ void be_Perm_reduce(ir_node *perm, int new_size, int *map)
        set_irn_in(perm, new_size, new_in);
 }
 
-ir_node *be_new_MemPerm(const arch_env_t *arch_env, ir_node *bl, int n, ir_node *in[])
+ir_node *be_new_MemPerm(ir_node *block, int n, ir_node *in[])
 {
-       ir_graph                     *irg       = get_Block_irg(bl);
+       ir_graph                     *irg       = get_Block_irg(block);
+       const arch_env_t             *arch_env  = be_get_irg_arch_env(irg);
        ir_node                      *frame     = get_irg_frame(irg);
        const arch_register_t        *sp        = arch_env->sp;
        ir_node                      *irn;
@@ -455,7 +455,7 @@ ir_node *be_new_MemPerm(const arch_env_t *arch_env, ir_node *bl, int n, ir_node
        real_in[0] = frame;
        memcpy(&real_in[1], in, n * sizeof(real_in[0]));
 
-       irn = new_ir_node(NULL, irg, bl, op_be_MemPerm, mode_T, n+1, real_in);
+       irn = new_ir_node(NULL, irg, block, op_be_MemPerm, mode_T, n+1, real_in);
 
        init_node_attr(irn, n + 1, n);
        be_node_set_reg_class_in(irn, 0, sp->reg_class);
@@ -832,15 +832,15 @@ ir_node *be_Barrier_append_node(ir_node *barrier, ir_node *node)
        return proj;
 }
 
-int be_has_frame_entity(const ir_node *irn)
+static bool be_has_frame_entity(const ir_node *irn)
 {
        switch (get_irn_opcode(irn)) {
        case beo_Spill:
        case beo_Reload:
        case beo_FrameAddr:
-               return 1;
+               return true;
        default:
-               return 0;
+               return false;
        }
 }
 
@@ -908,7 +908,7 @@ int be_get_MemPerm_entity_arity(const ir_node *irn)
        return get_irn_arity(irn) - 1;
 }
 
-static const arch_register_req_t *get_single_req(struct obstack *obst,
+const arch_register_req_t *be_create_reg_req(struct obstack *obst,
                const arch_register_t *reg, arch_register_req_type_t additional_types)
 {
        arch_register_req_t         *req = obstack_alloc(obst, sizeof(*req));
@@ -933,8 +933,8 @@ void be_set_constr_single_reg_in(ir_node *node, int pos,
                req = reg->single_req;
        } else {
                ir_graph       *irg  = get_irn_irg(node);
-               struct obstack *obst = be_get_birg_obst(irg);
-               req = get_single_req(obst, reg, additional_types);
+               struct obstack *obst = be_get_be_obst(irg);
+               req = be_create_reg_req(obst, reg, additional_types);
        }
        be_set_constr_in(node, pos, req);
 }
@@ -953,8 +953,8 @@ void be_set_constr_single_reg_out(ir_node *node, int pos,
                req = reg->single_req;
        } else {
                ir_graph       *irg  = get_irn_irg(node);
-               struct obstack *obst = be_get_birg_obst(irg);
-               req = get_single_req(obst, reg, additional_types);
+               struct obstack *obst = be_get_be_obst(irg);
+               req = be_create_reg_req(obst, reg, additional_types);
        }
 
        arch_irn_set_register(node, pos, reg);
@@ -1079,7 +1079,7 @@ static ir_entity *be_node_get_frame_entity(const ir_node *irn)
        return be_get_frame_entity(irn);
 }
 
-static void be_node_set_frame_entity(ir_node *irn, ir_entity *ent)
+void be_node_set_frame_entity(ir_node *irn, ir_entity *ent)
 {
        be_frame_attr_t *a;
 
@@ -1124,7 +1124,6 @@ static const arch_irn_ops_t be_node_irn_ops = {
        be_node_get_in_reg_req,
        be_node_classify,
        be_node_get_frame_entity,
-       be_node_set_frame_entity,
        be_node_set_frame_offset,
        be_node_get_sp_bias,
        NULL,    /* get_inverse             */
@@ -1153,13 +1152,6 @@ static ir_entity* dummy_get_frame_entity(const ir_node *node)
        return NULL;
 }
 
-static void dummy_set_frame_entity(ir_node *node, ir_entity *entity)
-{
-       (void) node;
-       (void) entity;
-       panic("dummy_set_frame_entity() should not be called");
-}
-
 static void dummy_set_frame_offset(ir_node *node, int bias)
 {
        (void) node;
@@ -1178,7 +1170,6 @@ static const arch_irn_ops_t dummy_be_irn_ops = {
        dummy_reg_req,
        dummy_classify,
        dummy_get_frame_entity,
-       dummy_set_frame_entity,
        dummy_set_frame_offset,
        dummy_get_sp_bias,
        NULL,      /* get_inverse           */
@@ -1199,7 +1190,7 @@ static const arch_irn_ops_t dummy_be_irn_ops = {
 ir_node *be_new_Phi(ir_node *block, int n_ins, ir_node **ins, ir_mode *mode,
                     const arch_register_class_t *cls)
 {
-       struct obstack *obst = be_get_birg_obst(get_irn_irg(block));
+       struct obstack *obst = be_get_be_obst(get_irn_irg(block));
        backend_info_t *info;
 
        ir_node *phi = new_r_Phi(block, n_ins, ins, mode);
@@ -1290,7 +1281,7 @@ void be_set_phi_reg_req(ir_node *node, const arch_register_req_t *req)
        assert(mode_is_datab(get_irn_mode(node)));
 }
 
-int be_dump_phi_reg_reqs(ir_node *node, FILE *F, dump_reason_t reason)
+void be_dump_phi_reg_reqs(FILE *F, ir_node *node, dump_reason_t reason)
 {
        switch (reason) {
        case dump_node_opcode_txt:
@@ -1313,15 +1304,12 @@ int be_dump_phi_reg_reqs(ir_node *node, FILE *F, dump_reason_t reason)
        default:
                break;
        }
-
-       return 0;
 }
 
 static const arch_irn_ops_t phi_irn_ops = {
        phi_get_irn_reg_req,
        dummy_classify,
        dummy_get_frame_entity,
-       dummy_set_frame_entity,
        dummy_set_frame_offset,
        dummy_get_sp_bias,
        NULL,    /* get_inverse             */
@@ -1342,10 +1330,8 @@ static const arch_irn_ops_t phi_irn_ops = {
 /**
  * ir_op-Operation: dump a be node to file
  */
-static int dump_node(ir_node *irn, FILE *f, dump_reason_t reason)
+static void dump_node(FILE *f, ir_node *irn, dump_reason_t reason)
 {
-       be_node_attr_t *at = get_irn_attr(irn);
-
        assert(is_be_node(irn));
 
        switch (reason) {
@@ -1353,13 +1339,13 @@ static int dump_node(ir_node *irn, FILE *f, dump_reason_t reason)
                        fputs(get_op_name(get_irn_op(irn)), f);
                        break;
                case dump_node_mode_txt:
-                       if (be_is_Perm(irn) || be_is_Copy(irn) || be_is_CopyKeep(irn)) {
-                               fprintf(f, " %s", get_mode_name(get_irn_mode(irn)));
+                       if (be_is_Copy(irn) || be_is_CopyKeep(irn)) {
+                               fprintf(f, "%s", get_mode_name(get_irn_mode(irn)));
                        }
                        break;
                case dump_node_nodeattr_txt:
                        if (be_is_Call(irn)) {
-                               be_call_attr_t *a = (be_call_attr_t *) at;
+                               const be_call_attr_t *a = get_irn_generic_attr_const(irn);
                                if (a->ent)
                                        fprintf(f, " [%s] ", get_entity_name(a->ent));
                        }
@@ -1378,7 +1364,7 @@ static int dump_node(ir_node *irn, FILE *f, dump_reason_t reason)
                        arch_dump_reqs_and_registers(f, irn);
 
                        if (be_has_frame_entity(irn)) {
-                               be_frame_attr_t *a = (be_frame_attr_t *) at;
+                               const be_frame_attr_t *a = get_irn_generic_attr_const(irn);
                                if (a->ent) {
                                        unsigned size = get_type_size_bytes(get_entity_type(a->ent));
                                        ir_fprintf(f, "frame entity: %+F, offset 0x%x (%d), size 0x%x (%d) bytes\n",
@@ -1388,48 +1374,44 @@ static int dump_node(ir_node *irn, FILE *f, dump_reason_t reason)
                        }
 
                        switch (get_irn_opcode(irn)) {
-                       case beo_IncSP:
-                               {
-                                       be_incsp_attr_t *a = (be_incsp_attr_t *) at;
-                                       if (a->offset == BE_STACK_FRAME_SIZE_EXPAND)
-                                               fprintf(f, "offset: FRAME_SIZE\n");
-                                       else if (a->offset == BE_STACK_FRAME_SIZE_SHRINK)
-                                               fprintf(f, "offset: -FRAME SIZE\n");
-                                       else
-                                               fprintf(f, "offset: %u\n", a->offset);
-                               }
+                       case beo_IncSP: {
+                               const be_incsp_attr_t *a = get_irn_generic_attr_const(irn);
+                               fprintf(f, "align: %d\n", a->align);
+                               if (a->offset == BE_STACK_FRAME_SIZE_EXPAND)
+                                       fprintf(f, "offset: FRAME_SIZE\n");
+                               else if (a->offset == BE_STACK_FRAME_SIZE_SHRINK)
+                                       fprintf(f, "offset: -FRAME SIZE\n");
+                               else
+                                       fprintf(f, "offset: %d\n", a->offset);
                                break;
-                       case beo_Call:
-                               {
-                                       be_call_attr_t *a = (be_call_attr_t *) at;
+                       }
+                       case beo_Call: {
+                               const be_call_attr_t *a = get_irn_generic_attr_const(irn);
 
-                                       if (a->ent)
-                                               fprintf(f, "\ncalling: %s\n", get_entity_name(a->ent));
-                               }
+                               if (a->ent)
+                                       fprintf(f, "\ncalling: %s\n", get_entity_name(a->ent));
                                break;
-                       case beo_MemPerm:
-                               {
-                                       int i;
-                                       for (i = 0; i < be_get_MemPerm_entity_arity(irn); ++i) {
-                                               ir_entity *in, *out;
-                                               in = be_get_MemPerm_in_entity(irn, i);
-                                               out = be_get_MemPerm_out_entity(irn, i);
-                                               if (in) {
-                                                       fprintf(f, "\nin[%d]: %s\n", i, get_entity_name(in));
-                                               }
-                                               if (out) {
-                                                       fprintf(f, "\nout[%d]: %s\n", i, get_entity_name(out));
-                                               }
+                       }
+                       case beo_MemPerm: {
+                               int i;
+                               for (i = 0; i < be_get_MemPerm_entity_arity(irn); ++i) {
+                                       ir_entity *in, *out;
+                                       in = be_get_MemPerm_in_entity(irn, i);
+                                       out = be_get_MemPerm_out_entity(irn, i);
+                                       if (in) {
+                                               fprintf(f, "\nin[%d]: %s\n", i, get_entity_name(in));
+                                       }
+                                       if (out) {
+                                               fprintf(f, "\nout[%d]: %s\n", i, get_entity_name(out));
                                        }
                                }
                                break;
+                       }
 
                        default:
                                break;
                        }
        }
-
-       return 0;
 }
 
 /**
@@ -1440,7 +1422,7 @@ static void copy_attr(ir_graph *irg, const ir_node *old_node, ir_node *new_node)
 {
        const be_node_attr_t *old_attr = get_irn_attr_const(old_node);
        be_node_attr_t *new_attr = get_irn_attr(new_node);
-       struct obstack *obst     = be_get_birg_obst(irg);
+       struct obstack *obst     = be_get_be_obst(irg);
        backend_info_t *old_info = be_get_info(old_node);
        backend_info_t *new_info = be_get_info(new_node);