bitset dumping
[libfirm] / ir / ir / irgraph.h
index a817cd3..bb612fd 100644 (file)
@@ -25,6 +25,7 @@
 #include "firm_types.h"
 #include "irop.h"
 #include "irextbb.h"
+#include "type.h"
 
 /**
  * @page ir_graph   The struct ir_graph
@@ -185,8 +186,8 @@ int      is_ir_graph(const void *thing);
 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);
@@ -317,7 +318,7 @@ irg_outs_state get_irg_outs_state(const ir_graph *irg);
 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 */
@@ -325,11 +326,14 @@ typedef enum {
   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
@@ -414,85 +418,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);
-
-/**
- * calling conventions
- */
-typedef enum {
-  irg_cc_reg_param        = 0x00000001, /**< Transmit parameters in registers, else the stack is used.
-                                             This flag may be set as default on some architectures. */
-  irg_cc_last_on_top      = 0x00000002, /**< The last non-register parameter is transmitted on top of
-                                             the stack. This is equivalent to the stdcall or pascal
-                                             calling convention. If this flag is not set, the first
-                                             non-register parameter is used (cdecl calling convention) */
-  irg_cc_callee_clear_stk = 0x00000004, /**< The callee clears the stack. This forbids variadic
-                                             function calls (stdcall). */
-  irg_cc_this_call        = 0x00000008  /**< The first parameter is a this pointer and is transmitted
-                                        in a special way. */
-} irg_calling_convention;
-
-/** Returns the calling convention of a graph. */
-unsigned get_irg_calling_convention(const ir_graph *irg);
-
-/** Sets the calling convention of a graph. */
-void set_irg_calling_convention(ir_graph *irg, unsigned cc_mask);
-
-/** Gets the default calling convention for new constructed graphs. */
-unsigned get_firm_default_calling_convention(void);
-
-/** Sets the default calling convention for new constructed graphs. */
-void set_firm_default_calling_convention(unsigned cc_mask);
-
-/**
- * check for the CDECL calling convention
- */
-#define IS_CDECL(cc_mask)     (((cc_mask) & (irg_cc_callee_clear_stk|irg_cc_last_on_top)) == 0)
-
-/**
- * check for the STDCALL calling convention
- */
-#define IS_STDCALL(cc_mask)   (((cc_mask) & (irg_cc_callee_clear_stk|irg_cc_last_on_top)) == irg_cc_callee_clear_stk)
-
-/**
- * add the CDECL convention bits
- */
-#define SET_CDECL(cc_mask)    ((cc_mask) & ~(irg_cc_callee_clear_stk|irg_cc_last_on_top))
-
-/**
- * add the STDCALL convention bits
- */
-#define SET_STDCALL(cc_mask)  (((cc_mask) & ~irg_cc_last_on_top) | irg_cc_callee_clear_stk)
+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);
@@ -524,6 +462,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