+/*
+ * Project: libFIRM
+ * File name: ir/ana/irbackedge_t.h
+ * Purpose: Access function for backedges -- private header.
+ * Author: Goetz Lindenmaier
+ * Modified by:
+ * Created: 7.2002
+ * CVS-ID: $Id$
+ * Copyright: (c) 2002-2003 Universität Karlsruhe
+ * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
+ */
+
#ifndef _IRBACKEDGE_T_H_
#define _IRBACKEDGE_T_H_
-# include "string.h"
-
-static INLINE int * new_backedge_arr(struct obstack *obst, int size) {
- int *res = NEW_ARR_D (int, obst, size);
- memset(res, 0, sizeof(int) * size);
- return res;
-}
-
+/**
+ * Allocate a new backedge array on the obstack for given size.
+ */
+int *new_backedge_arr(struct obstack *obst, int size);
-static INLINE void fix_backedges(struct obstack *obst, ir_node *n) {
- opcode opc = get_irn_opcode(n);
- int ** arr = NULL;
- if (opc == iro_Phi) arr = &n->attr.phi_backedge;
- if ((opc == iro_Block) && !interprocedural_view)
- arr = &n->attr.block.backedge;
- if ((opc == iro_Block) && interprocedural_view)
- arr = &n->attr.block.cg_backedge;
- if (opc == iro_Filter) arr = &n->attr.filter.backedge;
+/**
+ * allocate new backedge info for nodes.
+ */
+void new_backedge_info(ir_node *n);
- if (ARR_LEN(arr) != ARR_LEN(get_irn_in(n))-1)
- *arr = new_backedge_arr(obst, ARR_LEN(get_irn_in(n))-1);
-}
+/**
+ * Adapts backedges array to new size.
+ * Must be called if in array of irnode is changed. Else
+ * Segmentation faults might occur.
+ */
+void fix_backedges(struct obstack *obst, ir_node *n);
#endif /* _IRBACKEDGE_T_H_ */