From eb25a03cbe3c75c258daebaf50b37dece3ba1455 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Fri, 9 Jan 2009 03:53:29 +0000 Subject: [PATCH] - propagate r23142 changes to all backends [r25129] --- ir/be/TEMPLATE/TEMPLATE_emitter.c | 2 +- ir/be/TEMPLATE/TEMPLATE_new_nodes.c | 136 +++++------------------- ir/be/TEMPLATE/TEMPLATE_new_nodes.h | 38 ------- ir/be/TEMPLATE/TEMPLATE_nodes_attr.h | 4 - ir/be/arm/arm_emitter.c | 2 +- ir/be/arm/arm_new_nodes.c | 152 ++++++--------------------- ir/be/arm/arm_new_nodes.h | 45 -------- ir/be/arm/arm_nodes_attr.h | 4 - ir/be/mips/bearch_mips.c | 33 +----- ir/be/mips/mips_emitter.c | 2 +- ir/be/mips/mips_new_nodes.c | 134 ++++++----------------- ir/be/mips/mips_new_nodes.h | 30 ------ ir/be/mips/mips_nodes_attr.h | 3 - ir/be/mips/mips_transform.c | 11 +- ir/be/ppc32/ppc32_emitter.c | 2 +- ir/be/ppc32/ppc32_new_nodes.c | 127 +++++----------------- ir/be/ppc32/ppc32_new_nodes.h | 35 ------ ir/be/ppc32/ppc32_nodes_attr.h | 2 - 18 files changed, 124 insertions(+), 638 deletions(-) diff --git a/ir/be/TEMPLATE/TEMPLATE_emitter.c b/ir/be/TEMPLATE/TEMPLATE_emitter.c index 428dcbbdb..c313c5cdf 100644 --- a/ir/be/TEMPLATE/TEMPLATE_emitter.c +++ b/ir/be/TEMPLATE/TEMPLATE_emitter.c @@ -82,7 +82,7 @@ static const arch_register_t *get_out_reg(const ir_node *node, int pos) if (get_irn_mode(node) != mode_T) { reg = arch_get_irn_register(node); } else if (is_TEMPLATE_irn(node)) { - reg = get_TEMPLATE_out_reg(node, pos); + reg = arch_irn_get_register(node, pos); } else { const ir_edge_t *edge; diff --git a/ir/be/TEMPLATE/TEMPLATE_new_nodes.c b/ir/be/TEMPLATE/TEMPLATE_new_nodes.c index d3ff9ba63..a057aba84 100644 --- a/ir/be/TEMPLATE/TEMPLATE_new_nodes.c +++ b/ir/be/TEMPLATE/TEMPLATE_new_nodes.c @@ -65,7 +65,7 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, int inout) { char *dir = inout ? "out" : "in"; - int max = inout ? get_TEMPLATE_n_res(n) : get_irn_arity(n); + int max = inout ? (int) arch_irn_get_n_outs(n) : get_irn_arity(n); char buf[1024]; int i; @@ -131,11 +131,9 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, */ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { ir_mode *mode = NULL; - int bad = 0; - int i; - const TEMPLATE_attr_t *attr; + int bad = 0; + int i, n_res, flags; const arch_register_req_t **reqs; - const arch_register_t **slots; switch (reason) { case dump_node_opcode_txt: @@ -161,7 +159,6 @@ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { break; case dump_node_info_txt: - attr = get_TEMPLATE_attr_const(n); fprintf(F, "=== TEMPLATE attr begin ===\n"); /* dump IN requirements */ @@ -170,43 +167,42 @@ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { dump_reg_req(F, n, reqs, 0); } - /* dump OUT requirements */ - if (ARR_LEN(attr->slots) > 0) { + n_res = arch_irn_get_n_outs(n); + if (n_res > 0) { + /* dump OUT requirements */ reqs = get_TEMPLATE_out_req_all(n); dump_reg_req(F, n, reqs, 1); - } - /* dump assigned registers */ - slots = get_TEMPLATE_slots(n); - if (slots && ARR_LEN(attr->slots) > 0) { - for (i = 0; i < ARR_LEN(attr->slots); i++) { - if (slots[i]) { - fprintf(F, "reg #%d = %s\n", i, slots[i]->name); - } - else { - fprintf(F, "reg #%d = n/a\n", i); - } + /* dump assigned registers */ + for (i = 0; i < n_res; i++) { + const arch_register_t *reg = arch_irn_get_register(n, i); + + fprintf(F, "reg #%d = %s\n", i, reg ? arch_register_get_name(reg) : "n/a"); } + fprintf(F, "\n"); } - fprintf(F, "\n"); /* dump n_res */ - fprintf(F, "n_res = %d\n", get_TEMPLATE_n_res(n)); + fprintf(F, "n_res = %d\n", n_res); /* dump flags */ fprintf(F, "flags ="); - if (attr->flags == arch_irn_flags_none) { + flags = arch_irn_get_flags(n); + if (flags == arch_irn_flags_none) { fprintf(F, " none"); } else { - if (attr->flags & arch_irn_flags_dont_spill) { + if (flags & arch_irn_flags_dont_spill) { fprintf(F, " unspillable"); } - if (attr->flags & arch_irn_flags_rematerializable) { + if (flags & arch_irn_flags_rematerializable) { fprintf(F, " remat"); } + if (flags & arch_irn_flags_modify_flags) { + fprintf(F, " modify_flags"); + } } - fprintf(F, " (%d)\n", attr->flags); + fprintf(F, " (%d)\n", flags); /* TODO: dump all additional attributes */ @@ -290,85 +286,6 @@ void set_TEMPLATE_req_in(ir_node *node, const arch_register_req_t *req, int pos) attr->in_req[pos] = req; } -/** - * Returns the register flag of an TEMPLATE node. - */ -arch_irn_flags_t get_TEMPLATE_flags(const ir_node *node) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - return attr->flags; -} - -/** - * Sets the register flag of an TEMPLATE node. - */ -void set_TEMPLATE_flags(ir_node *node, arch_irn_flags_t flags) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); - attr->flags = flags; -} - -/** - * Returns the result register slots of an TEMPLATE node. - */ -const arch_register_t **get_TEMPLATE_slots(ir_node *node) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); - return attr->slots; -} - -/** - * Returns the result register slots of an TEMPLATE node. - */ -const arch_register_t * const *get_TEMPLATE_slots_const(const ir_node *node) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - return attr->slots; -} - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_TEMPLATE_out_reg_name(const ir_node *node, int pos) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - - assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_name(attr->slots[pos]); -} - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_TEMPLATE_out_regnr(const ir_node *node, int pos) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - - assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_index(attr->slots[pos]); -} - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_TEMPLATE_out_reg(const ir_node *node, int pos) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - - assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return attr->slots[pos]; -} - -/** - * Returns the number of results. - */ -int get_TEMPLATE_n_res(const ir_node *node) { - const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); - return ARR_LEN(attr->slots); -} - /** * Initializes the nodes attributes. */ @@ -381,14 +298,16 @@ void init_TEMPLATE_attributes(ir_node *node, arch_irn_flags_t flags, ir_graph *irg = get_irn_irg(node); struct obstack *obst = get_irg_obstack(irg); TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + backend_info_t *info; (void) execution_units; - attr->flags = flags; + arch_irn_set_flags(node, flags); attr->out_req = out_reqs; attr->in_req = in_reqs; - attr->slots = NEW_ARR_D(const arch_register_t*, obst, n_res); - memset(attr->slots, 0, n_res * sizeof(attr->slots[0])); + info = be_get_info(node); + info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res); + memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0])); } /*************************************************************************************** @@ -407,9 +326,6 @@ int TEMPLATE_compare_attr(ir_node *a, ir_node *b) const TEMPLATE_attr_t *attr_a = get_TEMPLATE_attr_const(a); const TEMPLATE_attr_t *attr_b = get_TEMPLATE_attr_const(b); - if(attr_a->flags != attr_b->flags) - return 1; - return 0; } diff --git a/ir/be/TEMPLATE/TEMPLATE_new_nodes.h b/ir/be/TEMPLATE/TEMPLATE_new_nodes.h index e35d5b718..b916262a3 100644 --- a/ir/be/TEMPLATE/TEMPLATE_new_nodes.h +++ b/ir/be/TEMPLATE/TEMPLATE_new_nodes.h @@ -75,44 +75,6 @@ void set_TEMPLATE_req_out(ir_node *node, const arch_register_req_t *req, int pos */ void set_TEMPLATE_req_in(ir_node *node, const arch_register_req_t *req, int pos); -/** - * Returns the register flag of an TEMPLATE node. - */ -arch_irn_flags_t get_TEMPLATE_flags(const ir_node *node); - -/** - * Sets the register flag of an TEMPLATE node. - */ -void set_TEMPLATE_flags(ir_node *node, arch_irn_flags_t flags); - -/** - * Returns the result register slots of an TEMPLATE node. - */ -const arch_register_t **get_TEMPLATE_slots(ir_node *node); - -const arch_register_t * const *get_TEMPLATE_slots_const(const ir_node *node); - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_TEMPLATE_out_reg_name(const ir_node *node, int pos); - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_TEMPLATE_out_regnr(const ir_node *node, int pos); - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_TEMPLATE_out_reg(const ir_node *node, int pos); - -/** - * Returns the number of results. - */ -int get_TEMPLATE_n_res(const ir_node *node); - - /* Include the generated headers */ #include "gen_TEMPLATE_new_nodes.h" diff --git a/ir/be/TEMPLATE/TEMPLATE_nodes_attr.h b/ir/be/TEMPLATE/TEMPLATE_nodes_attr.h index 9421e3491..d1fda2f00 100644 --- a/ir/be/TEMPLATE/TEMPLATE_nodes_attr.h +++ b/ir/be/TEMPLATE/TEMPLATE_nodes_attr.h @@ -31,12 +31,8 @@ typedef struct TEMPLATE_attr_t TEMPLATE_attr_t; struct TEMPLATE_attr_t { - arch_irn_flags_t flags; /**< indicating if spillable, rematerializeable ... etc. */ - const arch_register_req_t **in_req; /**< register requirements for arguments */ const arch_register_req_t **out_req; /**< register requirements for results */ - - const arch_register_t **slots; /**< register slots for assigned registers */ }; #endif diff --git a/ir/be/arm/arm_emitter.c b/ir/be/arm/arm_emitter.c index 85fa69e40..295ecd033 100644 --- a/ir/be/arm/arm_emitter.c +++ b/ir/be/arm/arm_emitter.c @@ -118,7 +118,7 @@ static const arch_register_t *get_out_reg(const ir_node *node, int pos) if (get_irn_mode(node) != mode_T) { reg = arch_get_irn_register(node); } else if (is_arm_irn(node)) { - reg = get_arm_out_reg(node, pos); + reg = arch_irn_get_register(node, pos); } else { const ir_edge_t *edge; diff --git a/ir/be/arm/arm_new_nodes.c b/ir/be/arm/arm_new_nodes.c index 5b2a3e1cf..d112294c2 100644 --- a/ir/be/arm/arm_new_nodes.c +++ b/ir/be/arm/arm_new_nodes.c @@ -92,7 +92,7 @@ const char *arm_get_fpa_imm_name(long imm_value) { static void dump_reg_req(FILE *F, const ir_node *node, const arch_register_req_t **reqs, int inout) { char *dir = inout ? "out" : "in"; - int max = inout ? get_arm_n_res(node) : get_irn_arity(node); + int max = inout ? (int) arch_irn_get_n_outs(node) : get_irn_arity(node); char buf[1024]; int i; @@ -157,11 +157,10 @@ static void dump_reg_req(FILE *F, const ir_node *node, */ static int arm_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { ir_mode *mode = NULL; - int bad = 0; - int i; + int bad = 0; + int i, n_res, flags; arm_attr_t *attr = get_arm_attr(n); const arch_register_req_t **reqs; - const arch_register_t **slots; arm_shift_modifier mod; switch (reason) { @@ -200,43 +199,43 @@ static int arm_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { dump_reg_req(F, n, reqs, 0); } - /* dump OUT requirements */ - if (ARR_LEN(attr->slots) > 0) { + n_res = arch_irn_get_n_outs(n); + if (n_res > 0) { + /* dump OUT requirements */ reqs = get_arm_out_req_all(n); dump_reg_req(F, n, reqs, 1); - } - /* dump assigned registers */ - slots = get_arm_slots(n); - if (slots && ARR_LEN(attr->slots) > 0) { - for (i = 0; i < ARR_LEN(attr->slots); i++) { - if (slots[i]) { - fprintf(F, "reg #%d = %s\n", i, slots[i]->name); - } - else { - fprintf(F, "reg #%d = n/a\n", i); - } + /* dump assigned registers */ + for (i = 0; i < n_res; i++) { + const arch_register_t *reg = arch_irn_get_register(n, i); + + fprintf(F, "reg #%d = %s\n", i, reg ? arch_register_get_name(reg) : "n/a"); } + fprintf(F, "\n"); } fprintf(F, "\n"); /* dump n_res */ - fprintf(F, "n_res = %d\n", get_arm_n_res(n)); + fprintf(F, "n_res = %d\n", n_res); /* dump flags */ fprintf(F, "flags ="); - if (attr->flags == arch_irn_flags_none) { + flags = arch_irn_get_flags(n); + if (flags == arch_irn_flags_none) { fprintf(F, " none"); } else { - if (attr->flags & arch_irn_flags_dont_spill) { + if (flags & arch_irn_flags_dont_spill) { fprintf(F, " unspillable"); } - if (attr->flags & arch_irn_flags_rematerializable) { + if (flags & arch_irn_flags_rematerializable) { fprintf(F, " remat"); } + if (flags & arch_irn_flags_modify_flags) { + fprintf(F, " modify_flags"); + } } - fprintf(F, " (%d)\n", attr->flags); + fprintf(F, " (%d)\n", flags); if (is_arm_CopyB(n)) { fprintf(F, "size = %lu\n", get_arm_imm_value(n)); @@ -398,95 +397,6 @@ void set_arm_req_in(ir_node *node, const arch_register_req_t *req, int pos) { attr->in_req[pos] = req; } -/** - * Returns the register flag of an arm node. - */ -arch_irn_flags_t get_arm_flags(const ir_node *node) { - const arm_attr_t *attr = get_arm_attr_const(node); - return attr->flags; -} - -/** - * Sets the register flag of an arm node. - */ -void set_arm_flags(ir_node *node, arch_irn_flags_t flags) { - arm_attr_t *attr = get_arm_attr(node); - attr->flags = flags; -} - -/** - * Returns the result register slots of an arm node. - */ -const arch_register_t **get_arm_slots(const ir_node *node) { - const arm_attr_t *attr = get_arm_attr_const(node); - return attr->slots; -} - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_arm_out_reg_name(const ir_node *node, int pos) { - const arm_attr_t *attr = get_arm_attr_const(node); - - assert(is_arm_irn(node) && "Not an arm node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_name(attr->slots[pos]); -} - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_arm_out_regnr(const ir_node *node, int pos) { - const arm_attr_t *attr = get_arm_attr_const(node); - - assert(is_arm_irn(node) && "Not an arm node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_index(attr->slots[pos]); -} - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_arm_out_reg(const ir_node *node, int pos) { - const arm_attr_t *attr = get_arm_attr_const(node); - - assert(is_arm_irn(node) && "Not an arm node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return attr->slots[pos]; -} - -/** - * Sets the flags for the n'th out. - */ -void set_arm_out_flags(ir_node *node, arch_irn_flags_t flags, int pos) { - arm_attr_t *attr = get_arm_attr(node); - assert(pos < ARR_LEN(attr->out_flags) && "Invalid OUT position."); - attr->out_flags[pos] = flags; -} - -/** - * Gets the flags for the n'th out. - */ -arch_irn_flags_t get_arm_out_flags(const ir_node *node, int pos) { - const arm_attr_t *attr = get_arm_attr_const(node); - assert(pos < ARR_LEN(attr->out_flags) && "Invalid OUT position."); - return attr->out_flags[pos]; -} - -/** - * Returns the number of results. - */ -int get_arm_n_res(const ir_node *node) { - const arm_attr_t *attr = get_arm_attr_const(node); - return ARR_LEN(attr->slots); -} - /** * Returns the immediate value */ @@ -600,19 +510,18 @@ static void init_arm_attributes(ir_node *node, int flags, ir_graph *irg = get_irn_irg(node); struct obstack *obst = get_irg_obstack(irg); arm_attr_t *attr = get_arm_attr(node); + backend_info_t *info; (void) execution_units; + arch_irn_set_flags(node, flags); attr->in_req = in_reqs; attr->out_req = out_reqs; - attr->flags = flags; attr->instr_fl = (ARM_COND_AL << 3) | ARM_SHF_NONE; attr->imm_value = 0; - attr->out_flags = NEW_ARR_D(int, obst, n_res); - memset(attr->out_flags, 0, n_res * sizeof(attr->out_flags[0])); - - attr->slots = NEW_ARR_D(const arch_register_t*, obst, n_res); - memset(attr->slots, 0, n_res * sizeof(attr->slots[0])); + info = be_get_info(node); + info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res); + memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0])); } /************************************************ @@ -714,16 +623,15 @@ static void arm_copy_attr(const ir_node *old_node, ir_node *new_node) { struct obstack *obst = get_irg_obstack(irg); const arm_attr_t *attr_old = get_arm_attr_const(old_node); arm_attr_t *attr_new = get_arm_attr(new_node); + backend_info_t *old_info = be_get_info(old_node); + backend_info_t *new_info = be_get_info(new_node); /* copy the attributes */ memcpy(attr_new, attr_old, get_op_attr_size(get_irn_op(old_node))); /* copy out flags */ - attr_new->out_flags = - DUP_ARR_D(int, obst, attr_old->out_flags); - /* copy register assignments */ - attr_new->slots = - DUP_ARR_D(arch_register_t*, obst, attr_old->slots); + new_info->out_infos = + DUP_ARR_D(reg_out_info_t, obst, old_info->out_infos); } diff --git a/ir/be/arm/arm_new_nodes.h b/ir/be/arm/arm_new_nodes.h index d2a2dcb07..411bccdb2 100644 --- a/ir/be/arm/arm_new_nodes.h +++ b/ir/be/arm/arm_new_nodes.h @@ -99,51 +99,6 @@ void set_arm_req_out_all(ir_node *node, const arch_register_req_t **reqs); */ void set_arm_req_in(ir_node *node, const arch_register_req_t *req, int pos); -/** - * Returns the register flag of an arm node. - */ -arch_irn_flags_t get_arm_flags(const ir_node *node); - -/** - * Sets the register flag of an arm node. - */ -void set_arm_flags(ir_node *node, arch_irn_flags_t flags); - -/** - * Returns the result register slots of an arm node. - */ -const arch_register_t **get_arm_slots(const ir_node *node); - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_arm_out_reg_name(const ir_node *node, int pos); - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_arm_out_regnr(const ir_node *node, int pos); - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_arm_out_reg(const ir_node *node, int pos); - -/** - * Returns the number of results. - */ -int get_arm_n_res(const ir_node *node); - -/** - * Sets the flags for the n'th out. - */ -void set_arm_out_flags(ir_node *node, arch_irn_flags_t flags, int pos); - -/** - * Gets the flags for the n'th out. - */ -arch_irn_flags_t get_arm_out_flags(const ir_node *node, int pos); - /** * Returns the immediate value */ diff --git a/ir/be/arm/arm_nodes_attr.h b/ir/be/arm/arm_nodes_attr.h index 70d611b6d..a5ac347e7 100644 --- a/ir/be/arm/arm_nodes_attr.h +++ b/ir/be/arm/arm_nodes_attr.h @@ -103,7 +103,6 @@ enum fpa_immediates { /** Generic ARM node attributes. */ typedef struct _arm_attr_t { except_attr exc; /**< the exception attribute. MUST be the first one. */ - arch_irn_flags_t flags; /**< indicating if spillable, rematerializeable ... etc. */ const arch_register_req_t **in_req; /**< register requirements for arguments */ const arch_register_req_t **out_req; /**< register requirements for results */ @@ -111,9 +110,6 @@ typedef struct _arm_attr_t { ir_mode *op_mode; /**< operation mode if different from node's mode */ unsigned instr_fl; /**< condition code, shift modifier */ long imm_value; /**< immediate */ - int *out_flags; /**< flags for each produced value */ - - const arch_register_t **slots; /**< register slots for assigned registers */ } arm_attr_t; /** Attributes for a SymConst */ diff --git a/ir/be/mips/bearch_mips.c b/ir/be/mips/bearch_mips.c index f6b773405..d48958535 100644 --- a/ir/be/mips/bearch_mips.c +++ b/ir/be/mips/bearch_mips.c @@ -132,31 +132,6 @@ arch_register_req_t *mips_get_irn_reg_req(const ir_node *node, int pos) return arch_no_register_req; } -static void mips_set_irn_reg(ir_node *irn, const arch_register_t *reg) -{ - int pos = 0; - - if (is_Proj(irn)) { - - if (get_irn_mode(irn) == mode_X) { - return; - } - - pos = mips_translate_proj_pos(irn); - irn = skip_Proj(irn); - } - - if (is_mips_irn(irn)) { - const arch_register_t **slots; - - slots = get_mips_slots(irn); - slots[pos] = reg; - } else { - /* here we set the registers for the Phi nodes */ - mips_set_firm_reg(irn, reg, cur_reg_set); - } -} - static arch_irn_class_t mips_classify(const ir_node *irn) { irn = skip_Proj_const(irn); @@ -517,7 +492,7 @@ static const arch_register_t *mips_abi_prologue(void *self, ir_node** mem, pmap // - setup first part of stackframe sp = new_bd_mips_addu(NULL, block, sp, mips_create_Immediate(initialstackframesize)); - mips_set_irn_reg(sp, &mips_gp_regs[REG_SP]); + arch_set_irn_register(sp, &mips_gp_regs[REG_SP]); panic("FIXME Use IncSP or set register requirement with ignore"); /* TODO: where to get an edge with a0-a3 @@ -555,7 +530,7 @@ static const arch_register_t *mips_abi_prologue(void *self, ir_node** mem, pmap // save old framepointer sp = new_bd_mips_addu(NULL, block, sp, mips_create_Immediate(-initialstackframesize)); - mips_set_irn_reg(sp, &mips_gp_regs[REG_SP]); + arch_set_irn_register(sp, &mips_gp_regs[REG_SP]); panic("FIXME Use IncSP or set register requirement with ignore"); reg = be_abi_reg_map_get(reg_map, &mips_gp_regs[REG_FP]); @@ -567,7 +542,7 @@ static const arch_register_t *mips_abi_prologue(void *self, ir_node** mem, pmap // setup framepointer fp = new_bd_mips_addu(NULL, block, sp, mips_create_Immediate(-initialstackframesize)); - mips_set_irn_reg(fp, &mips_gp_regs[REG_FP]); + arch_set_irn_register(fp, &mips_gp_regs[REG_FP]); panic("FIXME Use IncSP or set register requirement with ignore"); be_abi_reg_map_set(reg_map, &mips_gp_regs[REG_FP], fp); @@ -589,7 +564,7 @@ static void mips_abi_epilogue(void *self, ir_node *block, ir_node **mem, pmap *r // copy fp to sp sp = new_bd_mips_or(NULL, block, fp, mips_create_zero()); - mips_set_irn_reg(sp, &mips_gp_regs[REG_SP]); + arch_set_irn_register(sp, &mips_gp_regs[REG_SP]); panic("FIXME Use be_Copy or set register requirement with ignore"); // 1. restore fp diff --git a/ir/be/mips/mips_emitter.c b/ir/be/mips/mips_emitter.c index de1d27a72..57060cefa 100644 --- a/ir/be/mips/mips_emitter.c +++ b/ir/be/mips/mips_emitter.c @@ -92,7 +92,7 @@ static const arch_register_t *get_out_reg(const ir_node *node, int pos) if (get_irn_mode(node) != mode_T) { reg = arch_get_irn_register(node); } else if (is_mips_irn(node)) { - reg = get_mips_out_reg(node, pos); + reg = arch_irn_get_register(node, pos); } else { const ir_edge_t *edge; diff --git a/ir/be/mips/mips_new_nodes.c b/ir/be/mips/mips_new_nodes.c index 6c3766778..f5e90549c 100644 --- a/ir/be/mips/mips_new_nodes.c +++ b/ir/be/mips/mips_new_nodes.c @@ -68,7 +68,7 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, { const mips_attr_t *attr = get_mips_attr_const(n); char *dir = inout ? "out" : "in"; - int max = inout ? ARR_LEN(attr->slots) : get_irn_arity(n); + int max = inout ? (int) arch_irn_get_n_outs(n) : get_irn_arity(n); char buf[1024]; int i; @@ -134,10 +134,8 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, */ static int mips_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { int bad = 0; - int i; - const mips_attr_t *attr = get_mips_attr_const(n); + int i, n_res, flags; const arch_register_req_t **reqs; - const arch_register_t **slots; switch (reason) { case dump_node_opcode_txt: @@ -178,7 +176,6 @@ static int mips_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { break; case dump_node_info_txt: - attr = get_mips_attr(n); fprintf(F, "=== mips attr begin ===\n"); /* dump IN requirements */ @@ -187,43 +184,42 @@ static int mips_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { dump_reg_req(F, n, reqs, 0); } - /* dump OUT requirements */ - if (ARR_LEN(attr->slots) > 0) { + n_res = arch_irn_get_n_outs(n); + if (n_res > 0) { + /* dump OUT requirements */ reqs = get_mips_out_req_all(n); dump_reg_req(F, n, reqs, 1); - } - /* dump assigned registers */ - slots = get_mips_slots(n); - if (slots && ARR_LEN(attr->slots) > 0) { - for (i = 0; i < ARR_LEN(attr->slots); i++) { - if (slots[i]) { - fprintf(F, "reg #%d = %s\n", i, slots[i]->name); - } - else { - fprintf(F, "reg #%d = n/a\n", i); - } + /* dump assigned registers */ + for (i = 0; i < n_res; i++) { + const arch_register_t *reg = arch_irn_get_register(n, i); + + fprintf(F, "reg #%d = %s\n", i, reg ? arch_register_get_name(reg) : "n/a"); } + fprintf(F, "\n"); } - fprintf(F, "\n"); /* dump n_res */ - fprintf(F, "n_res = %d\n", ARR_LEN(attr->slots)); + fprintf(F, "n_res = %d\n", n_res); /* dump flags */ fprintf(F, "flags ="); - if (attr->flags == arch_irn_flags_none) { + flags = arch_irn_get_flags(n); + if (flags == arch_irn_flags_none) { fprintf(F, " none"); } else { - if (attr->flags & arch_irn_flags_dont_spill) { + if (flags & arch_irn_flags_dont_spill) { fprintf(F, " unspillable"); } - if (attr->flags & arch_irn_flags_rematerializable) { + if (flags & arch_irn_flags_rematerializable) { fprintf(F, " remat"); } + if (flags & arch_irn_flags_modify_flags) { + fprintf(F, " modify_flags"); + } } - fprintf(F, " (%d)\n", attr->flags); + fprintf(F, " (%d)\n", flags); fprintf(F, "=== mips attr end ===\n"); /* end of: case dump_node_info_txt */ @@ -326,75 +322,6 @@ void set_mips_req_in(ir_node *node, const arch_register_req_t *req, int pos) attr->in_req[pos] = req; } -/** - * Returns the register flag of an mips node. - */ -arch_irn_flags_t get_mips_flags(const ir_node *node) -{ - const mips_attr_t *attr = get_mips_attr_const(node); - return attr->flags; -} - -/** - * Sets the register flag of an mips node. - */ -void set_mips_flags(ir_node *node, arch_irn_flags_t flags) -{ - mips_attr_t *attr = get_mips_attr(node); - attr->flags = flags; -} - -/** - * Returns the result register slots of an mips node. - */ -const arch_register_t **get_mips_slots(const ir_node *node) -{ - const mips_attr_t *attr = get_mips_attr_const(node); - return attr->slots; -} - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_mips_out_reg_name(const ir_node *node, int pos) -{ - const mips_attr_t *attr = get_mips_attr_const(node); - - assert(is_mips_irn(node) && "Not an mips node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_name(attr->slots[pos]); -} - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_mips_out_regnr(const ir_node *node, int pos) -{ - const mips_attr_t *attr = get_mips_attr_const(node); - - assert(is_mips_irn(node) && "Not an mips node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_index(attr->slots[pos]); -} - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_mips_out_reg(const ir_node *node, int pos) -{ - const mips_attr_t *attr = get_mips_attr_const(node); - - assert(is_mips_irn(node) && "Not an mips node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return attr->slots[pos]; -} - /** * Initializes the nodes attributes. */ @@ -407,14 +334,16 @@ static void init_mips_attributes(ir_node *node, arch_irn_flags_t flags, ir_graph *irg = get_irn_irg(node); struct obstack *obst = get_irg_obstack(irg); mips_attr_t *attr = get_mips_attr(node); + backend_info_t *info; (void) execution_units; - attr->flags = flags; + arch_irn_set_flags(node, flags); attr->out_req = out_reqs; attr->in_req = in_reqs; - attr->slots = NEW_ARR_D(const arch_register_t*, obst, n_res); - memset(attr->slots, 0, n_res * sizeof(attr->slots[0])); + info = be_get_info(node); + info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res); + memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0])); } static void init_mips_immediate_attributes(ir_node *node, @@ -441,10 +370,6 @@ static int mips_compare_nodes_attr(ir_node *node_a, ir_node *node_b) const mips_attr_t *a = get_mips_attr_const(node_a); const mips_attr_t *b = get_mips_attr_const(node_b); - if(a->flags != b->flags) - return 1; - if(ARR_LEN(a->slots) != ARR_LEN(b->slots)) - return 1; if(a->switch_default_pn != b->switch_default_pn) return 1; @@ -456,8 +381,6 @@ static int mips_compare_immediate_attr(ir_node *node_a, ir_node *node_b) const mips_immediate_attr_t *a = get_mips_immediate_attr_const(node_a); const mips_immediate_attr_t *b = get_mips_immediate_attr_const(node_b); - if(a->attr.flags != b->attr.flags) - return 1; if(a->val != b->val) return 1; @@ -485,12 +408,15 @@ static void mips_copy_attr(const ir_node *old_node , ir_node *new_node) struct obstack *obst = get_irg_obstack(irg); const mips_attr_t *attr_old = get_mips_attr_const(old_node); mips_attr_t *attr_new = get_mips_attr(new_node); + backend_info_t *old_info = be_get_info(old_node); + backend_info_t *new_info = be_get_info(new_node); /* copy the attributes */ memcpy(attr_new, attr_old, get_op_attr_size(get_irn_op(old_node))); - /* copy register assignments */ - attr_new->slots = DUP_ARR_D(arch_register_t*, obst, attr_old->slots); + /* copy out flags */ + new_info->out_infos = + DUP_ARR_D(reg_out_info_t, obst, old_info->out_infos); } /*************************************************************************************** diff --git a/ir/be/mips/mips_new_nodes.h b/ir/be/mips/mips_new_nodes.h index 4c62d954a..38d1b88d4 100644 --- a/ir/be/mips/mips_new_nodes.h +++ b/ir/be/mips/mips_new_nodes.h @@ -78,36 +78,6 @@ void set_mips_req_out(ir_node *node, const arch_register_req_t *req, int pos); */ void set_mips_req_in(ir_node *node, const arch_register_req_t *req, int pos); -/** - * Returns the register flag of an mips node. - */ -arch_irn_flags_t get_mips_flags(const ir_node *node); - -/** - * Sets the register flag of an mips node. - */ -void set_mips_flags(ir_node *node, arch_irn_flags_t flags); - -/** - * Returns the result register slots of an mips node. - */ -const arch_register_t **get_mips_slots(const ir_node *node); - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_mips_out_reg_name(const ir_node *node, int pos); - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_mips_out_regnr(const ir_node *node, int pos); - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_mips_out_reg(const ir_node *node, int pos); - /* Include the generated headers */ #include "gen_mips_new_nodes.h" diff --git a/ir/be/mips/mips_nodes_attr.h b/ir/be/mips/mips_nodes_attr.h index e08ab9982..ab4da239b 100644 --- a/ir/be/mips/mips_nodes_attr.h +++ b/ir/be/mips/mips_nodes_attr.h @@ -32,14 +32,11 @@ typedef struct mips_attr_t { except_attr exc; /**< the exception attribute. MUST be the first one. */ - arch_irn_flags_t flags; /**< indicating if spillable, rematerializeable ... etc. */ int switch_default_pn; /**< proj number of default case in switch */ const arch_register_req_t **in_req; /**< register requirements for arguments */ const arch_register_req_t **out_req; /**< register requirements for results */ - - const arch_register_t **slots; /**< register slots for assigned registers */ } mips_attr_t; typedef enum mips_immediate_type_t { diff --git a/ir/be/mips/mips_transform.c b/ir/be/mips/mips_transform.c index 2a23ff6d0..a01c6b4b6 100644 --- a/ir/be/mips/mips_transform.c +++ b/ir/be/mips/mips_transform.c @@ -78,13 +78,11 @@ ir_node *mips_create_Immediate(long val) { ir_graph *irg = current_ir_graph; ir_node *block = get_irg_start_block(irg); - const arch_register_t **slots; ir_node *res; assert(val >= -32768 && val <= 32767); res = new_bd_mips_Immediate(NULL, block, MIPS_IMM_CONST, NULL, val); - slots = get_mips_slots(res); - slots[0] = &mips_gp_regs[REG_GP_NOREG]; + arch_set_irn_register(res, &mips_gp_regs[REG_GP_NOREG]); return res; } @@ -94,9 +92,8 @@ ir_node* mips_create_zero(void) ir_graph *irg = current_ir_graph; ir_node *block = get_irg_start_block(irg); ir_node *zero = new_bd_mips_zero(NULL, block); - const arch_register_t **slots = get_mips_slots(zero); - slots[0] = &mips_gp_regs[REG_ZERO]; + arch_set_irn_register(zero, &mips_gp_regs[REG_GP_NOREG]); return zero; } @@ -320,7 +317,6 @@ static ir_node* gen_SymConst(ir_node *node) dbg_info *dbgi = get_irn_dbg_info(node); ir_node *block = be_transform_node(get_nodes_block(node)); ir_entity *entity; - const arch_register_t **slots; ir_node *lui, *or_const, *or; if(get_SymConst_kind(node) != symconst_addr_ent) { @@ -333,8 +329,7 @@ static ir_node* gen_SymConst(ir_node *node) or_const = new_bd_mips_Immediate(dbgi, block, MIPS_IMM_SYMCONST_LO, entity, 0); or = new_bd_mips_or(dbgi, block, lui, or_const); - slots = get_mips_slots(or_const); - slots[0] = &mips_gp_regs[REG_GP_NOREG]; + arch_set_irn_register(or_const, &mips_gp_regs[REG_GP_NOREG]); return or; } diff --git a/ir/be/ppc32/ppc32_emitter.c b/ir/be/ppc32/ppc32_emitter.c index 24a508977..e0bd0bea9 100644 --- a/ir/be/ppc32/ppc32_emitter.c +++ b/ir/be/ppc32/ppc32_emitter.c @@ -101,7 +101,7 @@ static const arch_register_t *get_out_reg(const ir_node *irn, int pos) { if (get_irn_mode(irn) != mode_T) { reg = arch_get_irn_register(irn); } else if (is_ppc32_irn(irn)) { - reg = get_ppc32_out_reg(irn, pos); + reg = arch_irn_get_register(irn, pos); } else { const ir_edge_t *edge; diff --git a/ir/be/ppc32/ppc32_new_nodes.c b/ir/be/ppc32/ppc32_new_nodes.c index 4ae904bd9..9d97cbadb 100644 --- a/ir/be/ppc32/ppc32_new_nodes.c +++ b/ir/be/ppc32/ppc32_new_nodes.c @@ -19,8 +19,8 @@ /** * @file - * @brief This file implements the creation of the achitecture specific firm - * opcodes and the coresponding node constructors for the ppc assembler + * @brief This file implements the creation of the architecture specific firm + * opcodes and the corresponding node constructors for the ppc assembler * irg. * @author Moritz Kroll, Jens Mueller * @version $Id$ @@ -65,7 +65,7 @@ */ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, int inout) { char *dir = inout ? "out" : "in"; - int max = inout ? get_ppc32_n_res(n) : get_irn_arity(n); + int max = inout ? (int) arch_irn_get_n_outs(n) : get_irn_arity(n); char buf[1024]; int i; @@ -132,10 +132,8 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, static int ppc32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { ir_mode *mode = NULL; int bad = 0; - int i; - ppc32_attr_t *attr; + int i, n_res, flags; const arch_register_req_t **reqs; - const arch_register_t **slots; switch (reason) { case dump_node_opcode_txt: @@ -161,7 +159,6 @@ static int ppc32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { break; case dump_node_info_txt: - attr = get_ppc32_attr(n); fprintf(F, "=== ppc attr begin ===\n"); /* dump IN requirements */ @@ -170,43 +167,42 @@ static int ppc32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { dump_reg_req(F, n, reqs, 0); } - /* dump OUT requirements */ - if (ARR_LEN(attr->slots) > 0) { + n_res = arch_irn_get_n_outs(n); + if (n_res > 0) { + /* dump OUT requirements */ reqs = get_ppc32_out_req_all(n); dump_reg_req(F, n, reqs, 1); - } - /* dump assigned registers */ - slots = get_ppc32_slots(n); - if (slots && ARR_LEN(attr->slots) > 0) { - for (i = 0; i < ARR_LEN(attr->slots); i++) { - if (slots[i]) { - fprintf(F, "reg #%d = %s\n", i, slots[i]->name); - } - else { - fprintf(F, "reg #%d = n/a\n", i); - } + /* dump assigned registers */ + for (i = 0; i < n_res; i++) { + const arch_register_t *reg = arch_irn_get_register(n, i); + + fprintf(F, "reg #%d = %s\n", i, reg ? arch_register_get_name(reg) : "n/a"); } + fprintf(F, "\n"); } - fprintf(F, "\n"); /* dump n_res */ - fprintf(F, "n_res = %d\n", get_ppc32_n_res(n)); + fprintf(F, "n_res = %d\n", n_res); /* dump flags */ fprintf(F, "flags ="); - if (attr->flags == arch_irn_flags_none) { + flags = arch_irn_get_flags(n); + if (flags == arch_irn_flags_none) { fprintf(F, " none"); } else { - if (attr->flags & arch_irn_flags_dont_spill) { + if (flags & arch_irn_flags_dont_spill) { fprintf(F, " unspillable"); } - if (attr->flags & arch_irn_flags_rematerializable) { + if (flags & arch_irn_flags_rematerializable) { fprintf(F, " remat"); } + if (flags & arch_irn_flags_modify_flags) { + fprintf(F, " modify_flags"); + } } - fprintf(F, " (%d)\n", attr->flags); + fprintf(F, " (%d)\n", flags); /* TODO: dump all additional attributes */ @@ -292,77 +288,6 @@ void set_ppc32_req_in(ir_node *node, const arch_register_req_t *req, int pos) { attr->in_req[pos] = req; } -/** - * Returns the register flag of an ppc node. - */ -arch_irn_flags_t get_ppc32_flags(const ir_node *node) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - return attr->flags; -} - -/** - * Sets the register flag of an ppc node. - */ -void set_ppc32_flags(ir_node *node, arch_irn_flags_t flags) { - ppc32_attr_t *attr = get_ppc32_attr(node); - attr->flags = flags; -} - -/** - * Returns the result register slots of an ppc node. - */ -const arch_register_t **get_ppc32_slots(const ir_node *node) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - return attr->slots; -} - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_ppc32_out_reg_name(const ir_node *node, int pos) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - - assert(is_ppc32_irn(node) && "Not an ppc node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_name(attr->slots[pos]); -} - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_ppc32_out_regnr(const ir_node *node, int pos) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - - assert(is_ppc32_irn(node) && "Not an ppc node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return arch_register_get_index(attr->slots[pos]); -} - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_ppc32_out_reg(const ir_node *node, int pos) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - - assert(is_ppc32_irn(node) && "Not an ppc node."); - assert(pos < ARR_LEN(attr->slots) && "Invalid OUT position."); - assert(attr->slots[pos] && "No register assigned"); - - return attr->slots[pos]; -} - -/** - * Returns the number of results. - */ -int get_ppc32_n_res(const ir_node *node) { - const ppc32_attr_t *attr = get_ppc32_attr_const(node); - return ARR_LEN(attr->slots); -} - /** * Sets the type of the constant (if any) * May be either iro_Const or iro_SymConst @@ -512,9 +437,10 @@ void init_ppc32_attributes(ir_node *node, int flags, ir_graph *irg = get_irn_irg(node); struct obstack *obst = get_irg_obstack(irg); ppc32_attr_t *attr = get_ppc32_attr(node); + backend_info_t *info; (void) execution_units; - attr->flags = flags; + arch_irn_set_flags(node, flags); attr->in_req = in_reqs; attr->out_req = out_reqs; @@ -522,8 +448,9 @@ void init_ppc32_attributes(ir_node *node, int flags, attr->offset_mode = ppc32_ao_Illegal; attr->data.empty = NULL; - attr->slots = NEW_ARR_D(const arch_register_t*, obst, n_res); - memset(attr->slots, 0, n_res * sizeof(attr->slots[0])); + info = be_get_info(node); + info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res); + memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0])); } diff --git a/ir/be/ppc32/ppc32_new_nodes.h b/ir/be/ppc32/ppc32_new_nodes.h index db2443270..cf8bcaeff 100644 --- a/ir/be/ppc32/ppc32_new_nodes.h +++ b/ir/be/ppc32/ppc32_new_nodes.h @@ -75,41 +75,6 @@ void set_ppc32_req_out(ir_node *node, const arch_register_req_t *req, int pos); */ void set_ppc32_req_in(ir_node *node, const arch_register_req_t *req, int pos); -/** - * Returns the register flag of an ppc node. - */ -arch_irn_flags_t get_ppc32_flags(const ir_node *node); - -/** - * Sets the register flag of an ppc node. - */ -void set_ppc32_flags(ir_node *node, arch_irn_flags_t flags); - -/** - * Returns the result register slots of an ppc node. - */ -const arch_register_t **get_ppc32_slots(const ir_node *node); - -/** - * Returns the name of the OUT register at position pos. - */ -const char *get_ppc32_out_reg_name(const ir_node *node, int pos); - -/** - * Returns the index of the OUT register at position pos within its register class. - */ -int get_ppc32_out_regnr(const ir_node *node, int pos); - -/** - * Returns the OUT register at position pos. - */ -const arch_register_t *get_ppc32_out_reg(const ir_node *node, int pos); - -/** - * Returns the number of results. - */ -int get_ppc32_n_res(const ir_node *node); - ppc32_attr_content_type get_ppc32_type(const ir_node *node); void set_ppc32_constant_tarval(ir_node *node, tarval *const_tarval); diff --git a/ir/be/ppc32/ppc32_nodes_attr.h b/ir/be/ppc32/ppc32_nodes_attr.h index f504a723d..30b1aa6c8 100644 --- a/ir/be/ppc32/ppc32_nodes_attr.h +++ b/ir/be/ppc32/ppc32_nodes_attr.h @@ -53,7 +53,6 @@ typedef enum { typedef struct _ppc32_attr_t { except_attr exc; /**< the exception attribute. MUST be the first one. */ - arch_irn_flags_t flags; /**< indicating if spillable, rematerializeable ... etc. */ const arch_register_req_t **in_req; /**< register requirements for arguments */ const arch_register_req_t **out_req; /**< register requirements for results */ @@ -70,7 +69,6 @@ typedef struct _ppc32_attr_t { void* empty; } data; - const arch_register_t **slots; /**< register slots for assigned registers */ } ppc32_attr_t; #endif -- 2.20.1