-static INLINE bool legal_backarray (ir_node *n) {
- int *ba = mere_get_backarray(n);
- if (ba && (ARR_LEN(ba) != ARR_LEN(get_irn_in(n))-1)) /* Use get_irn_in -- sensitive to view! */
- return false;
- return true;
-}
-
-
-void fix_backedges(struct obstack *obst, ir_node *n) {
- int *arr = mere_get_backarray(n);
- opcode opc;
-
- if (! arr)
- return;
-
- if (ARR_LEN(arr) != ARR_LEN(get_irn_in(n))-1) {
- arr = new_backedge_arr(obst, ARR_LEN(get_irn_in(n))-1);
-
- opc = get_irn_opcode(n);
- if (opc == iro_Phi)
- n->attr.phi_backedge = arr;
- else if (opc == iro_Block) {
- if (!get_interprocedural_view())
- n->attr.block.backedge = arr;
- else
- n->attr.block.cg_backedge = arr;
- }
- else if (opc == iro_Filter)
- n->attr.filter.backedge = arr;
- }
-
- assert(legal_backarray(n));
-
- /* @@@ more efficient in memory consumption, not possible with
- array implementation.
- if (ARR_LEN(arr) < ARR_LEN(get_irn_in(n))-1) {
- ARR_SETLEN(int, arr, ARR_LEN(get_irn_in(n))-1);
- }*/
+static int legal_backarray(ir_node *n)
+{
+ bitset_t *ba = mere_get_backarray(n);
+ if (ba && (bitset_size(ba) != (unsigned) get_irn_arity(n)))
+ return 0;
+ return 1;