if_conversion is OFF by default now
[libfirm] / ir / ir / irgraph.h
index 5dcc413..742ed6c 100644 (file)
  *
  * @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
@@ -427,37 +415,19 @@ irg_inline_property get_irg_inline_property(const ir_graph *irg);
 /** Sets the inline property of a graph. */
 void set_irg_inline_property(ir_graph *irg, irg_inline_property s);
 
-/** additional graph flags:
- *  Tell about special properties of a graph. Some
- *  of these may be discovered by analyses.
+/**
+ * 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().
  */
-typedef enum {
-  irg_const_function    = 0x00000001, /**< This graph did not access memory and calculates
-                                         its return values solely from its parameters.
-                                         GCC: __attribute__((const)). */
-  irg_pure_function     = 0x00000002, /**< This graph did NOT write to memory and calculates
-                                         its return values solely form its parameters and
-                                         the memory they points to (or global vars).
-                                         GCC: __attribute__((pure)). */
-  irg_noreturn_function = 0x00000004, /**< This graph did not return due to an aborting system
-                                         call.
-                                         GCC: __attribute__((noreturn)). */
-  irg_nothrow_function  = 0x00000008, /**< This graph cannot throw an exception.
-                                         GCC: __attribute__((nothrow)). */
-  irg_naked_function    = 0x00000010, /**< This graph is naked.
-                                         GCC: __attribute__((naked)). */
-  irg_malloc_function   = 0x00000020  /**< This graph returns newly allocate memory.
-                                         GCC: __attribute__((malloc)). */
-} irg_additional_property;
-
-/** Returns the mask of the additional graph properties. */
 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, irg_additional_property flag);
+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);
@@ -489,6 +459,11 @@ void set_irg_loc_description(ir_graph *irg, int n, void *description);
 /** 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