X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firbackedge.c;h=a049e73c72afe8e8afadca76d50ec2cc62ca859d;hb=6b1241844320899c9c3f175a81a274fcbdd5be27;hp=cb4a36657880dddd691851d14f07ab08f79703d4;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/ir/ana/irbackedge.c b/ir/ana/irbackedge.c index cb4a36657..a049e73c7 100644 --- a/ir/ana/irbackedge.c +++ b/ir/ana/irbackedge.c @@ -24,9 +24,7 @@ * @date 7.2002 * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include "irnode_t.h" #include "irgraph_t.h" @@ -46,7 +44,8 @@ * Does not assert whether the backarray is correct -- use * very careful! */ -static unsigned *mere_get_backarray(ir_node *n) { +static unsigned *mere_get_backarray(ir_node *n) +{ switch (get_irn_opcode(n)) { case iro_Block: if (!get_Block_matured(n)) return NULL; @@ -59,8 +58,8 @@ static unsigned *mere_get_backarray(ir_node *n) { } break; case iro_Phi: - assert(n->attr.phi_backedge && "backedge array not allocated!"); - return n->attr.phi_backedge; + assert(n->attr.phi.u.backedge && "backedge array not allocated!"); + return n->attr.phi.u.backedge; break; case iro_Filter: if (get_interprocedural_view()) { @@ -77,7 +76,8 @@ static unsigned *mere_get_backarray(ir_node *n) { * Returns backarray if the node can have backedges, else returns * NULL. */ -static unsigned *get_backarray(ir_node *n) { +static unsigned *get_backarray(ir_node *n) +{ unsigned *ba = mere_get_backarray(n); #ifndef NDEBUG @@ -91,18 +91,22 @@ static unsigned *get_backarray(ir_node *n) { return ba; } +#ifndef NDEBUG /** * Returns non-zero if node has no backarray, or * if size of backarray == size of in array. */ -static int legal_backarray(ir_node *n) { +static int legal_backarray(ir_node *n) +{ unsigned *ba = mere_get_backarray(n); - if (ba && (rbitset_size(ba) != get_irn_arity(n))) + if (ba && (rbitset_size(ba) != (unsigned) get_irn_arity(n))) return 0; return 1; } +#endif -void fix_backedges(struct obstack *obst, ir_node *n) { +void fix_backedges(struct obstack *obst, ir_node *n) +{ unsigned *arr = mere_get_backarray(n); ir_opcode opc; int arity; @@ -111,12 +115,12 @@ void fix_backedges(struct obstack *obst, ir_node *n) { return; arity = get_irn_arity(n); - if (rbitset_size(arr) != arity) { + if (rbitset_size(arr) != (unsigned) arity) { arr = new_backedge_arr(obst, arity); opc = get_irn_opcode(n); if (opc == iro_Phi) - n->attr.phi_backedge = arr; + n->attr.phi.u.backedge = arr; else if (opc == iro_Block) { if (!get_interprocedural_view()) n->attr.block.backedge = arr; @@ -131,7 +135,8 @@ void fix_backedges(struct obstack *obst, ir_node *n) { } #ifdef INTERPROCEDURAL_VIEW -int is_inter_backedge(ir_node *n, int pos) { +int is_inter_backedge(ir_node *n, int pos) +{ int res; int rem = get_interprocedural_view(); set_interprocedural_view(0); @@ -140,7 +145,8 @@ int is_inter_backedge(ir_node *n, int pos) { return res; } -int is_intra_backedge(ir_node *n, int pos) { +int is_intra_backedge(ir_node *n, int pos) +{ int res; int rem = get_interprocedural_view(); set_interprocedural_view(1); @@ -152,7 +158,8 @@ int is_intra_backedge(ir_node *n, int pos) { /* Returns non-zero if the predecessor pos is a backedge. */ -int is_backedge(ir_node *n, int pos) { +int is_backedge(ir_node *n, int pos) +{ unsigned *ba = get_backarray(n); if (ba) return rbitset_is_set(ba, pos); @@ -160,21 +167,24 @@ int is_backedge(ir_node *n, int pos) { } /* Remarks that edge pos is a backedge. */ -void set_backedge(ir_node *n, int pos) { +void set_backedge(ir_node *n, int pos) +{ unsigned *ba = get_backarray(n); assert(ba && "can only set backedges at Phi, Filter, Block nodes."); rbitset_set(ba, pos); } /* Remarks that edge pos is a backedge. */ -void set_not_backedge(ir_node *n, int pos) { +void set_not_backedge(ir_node *n, int pos) +{ unsigned *ba = get_backarray(n); assert(ba && "can only set backedges at Phi, Filter, Block nodes."); rbitset_clear(ba, pos); } /* Returns non-zero if n has backedges. */ -int has_backedges(ir_node *n) { +int has_backedges(ir_node *n) +{ unsigned *ba = get_backarray(n); if (ba) { int arity = get_irn_arity(n); @@ -184,7 +194,8 @@ int has_backedges(ir_node *n) { } /** Sets all backedge information to zero. */ -void clear_backedges(ir_node *n) { +void clear_backedges(ir_node *n) +{ int i, arity; unsigned *ba; #ifdef INTERPROCEDURAL_VIEW @@ -210,19 +221,21 @@ void clear_backedges(ir_node *n) { } /* Allocate a new backedge array on the obstack for given size. */ -unsigned *new_backedge_arr(struct obstack *obst, unsigned size) { +unsigned *new_backedge_arr(struct obstack *obst, unsigned size) +{ return rbitset_w_size_obstack_alloc(obst, size); } /* TODO: add an ir_op operation */ -void new_backedge_info(ir_node *n) { +void new_backedge_info(ir_node *n) +{ switch (get_irn_opcode(n)) { case iro_Block: n->attr.block.cg_backedge = NULL; n->attr.block.backedge = new_backedge_arr(current_ir_graph->obst, get_irn_arity(n)); break; case iro_Phi: - n->attr.phi_backedge = new_backedge_arr(current_ir_graph->obst, get_irn_arity(n)); + n->attr.phi.u.backedge = new_backedge_arr(current_ir_graph->obst, get_irn_arity(n)); break; case iro_Filter: n->attr.filter.backedge = new_backedge_arr(current_ir_graph->obst, get_irn_arity(n));