*
* @author Martin Trapp, Christian Schaefer
*/
+#ifndef _IRGRAPH_H_
+#define _IRGRAPH_H_
#include <stddef.h>
+#include "firm_types.h"
#include "irop.h"
#include "irextbb.h"
-
-# ifndef _IRGRAPH_H_
-# define _IRGRAPH_H_
-# include "entity.h"
-
-/* to resolve recursion between irnode.h and irgraph.h */
-#ifndef _IR_NODE_TYPEDEF_
-#define _IR_NODE_TYPEDEF_
-typedef struct ir_node ir_node;
-#endif
-
-/* to resolve recursion between entity.h and irgraph.h */
-#ifndef _IR_GRAPH_TYPEDEF_
-#define _IR_GRAPH_TYPEDEF_
-typedef struct ir_graph ir_graph;
-#endif
+#include "type.h"
/**
* @page ir_graph The struct ir_graph
entity *get_irg_entity (const ir_graph *irg);
void set_irg_entity (ir_graph *irg, entity *ent);
-type *get_irg_frame_type (ir_graph *irg);
-void set_irg_frame_type (ir_graph *irg, type *ftp);
+ir_type *get_irg_frame_type (ir_graph *irg);
+void set_irg_frame_type (ir_graph *irg, ir_type *ftp);
ir_node *get_irg_start_block (const ir_graph *irg);
void set_irg_start_block (ir_graph *irg, ir_node *node);
void set_irg_outs_inconsistent(ir_graph *irg);
/** state: dom_state
- * Signals the state of the dominator information.
+ * Signals the state of the dominator / post dominator information.
*/
typedef enum {
dom_none, /**< dominator are not computed, no memory is allocated */
dom_inconsistent /**< dominator information is computed but the graph has been changed since */
} irg_dom_state;
-/** returns the dom_state of an IR graph. */
+/** returns the dominator state of an IR graph. */
irg_dom_state get_irg_dom_state(const ir_graph *irg);
-/** sets the dom_state of an IR graph. */
-void set_irg_dom_inconsistent(ir_graph *irg);
+/** returns the post dominator state of an IR graph. */
+irg_dom_state get_irg_postdom_state(const ir_graph *irg);
+
+/** sets the dominator and post dominator state of an IR graph to inconsistent. */
+void set_irg_doms_inconsistent(ir_graph *irg);
/** state: loopinfo_state
* Loop information describes the loops within the control and
/** Sets the inline property of a graph. */
void set_irg_inline_property(ir_graph *irg, irg_inline_property s);
+/**
+ * Returns the mask of the additional graph properties.
+ * The properties are automatically inherited from the method type
+ * if they were not set using set_irg_additional_properties() or
+ * set_irg_additional_property().
+ */
+unsigned get_irg_additional_properties(const ir_graph *irg);
+
+/** Sets the mask of the additional graph properties. */
+void set_irg_additional_properties(ir_graph *irg, unsigned property_mask);
+
+/** Sets one additional graph property. */
+void set_irg_additional_property(ir_graph *irg, mtp_additional_property flag);
+
/** A void * field to link arbitrary information to the node. */
void set_irg_link (ir_graph *irg, void *thing);
void *get_irg_link (const ir_graph *irg);
/** get the description for local value n */
void *get_irg_loc_description(ir_graph *irg, int n);
+/** Returns a estimated node count of the irg. This count is updated
+ * after every irg_walk_graph().
+ */
+unsigned get_irg_estimated_node_cnt(const ir_graph *irg);
+
/**
* Access custom graph data.
* The data must have been registered with