oops
[libfirm] / include / libfirm / irgraph.h
index de06310..53a284b 100644 (file)
 #include <stddef.h>
 
 #include "firm_types.h"
-#include "irop.h"
-#include "iropt.h"
-#include "irextbb.h"
-#include "typerep.h"
 
 /**
  * @page ir_graph   The struct ir_graph
@@ -206,6 +202,9 @@ ir_type *get_irg_frame_type(ir_graph *irg);
 /** Sets the frame type of an IR graph. */
 void     set_irg_frame_type(ir_graph *irg, ir_type *ftp);
 
+/** Returns the value parameter type of an IR graph. */
+ir_type *get_irg_value_param_type(ir_graph *irg);
+
 /** Returns the start block of an IR graph. */
 ir_node *get_irg_start_block(const ir_graph *irg);
 /** Sets the start block of an IR graph. */
@@ -260,11 +259,6 @@ ir_node *get_irg_args(const ir_graph *irg);
 /** Sets the node that represents the argument pointer of the given IR graph. */
 void     set_irg_args(ir_graph *irg, ir_node *node);
 
-/** Returns the node that represents the value parameter base pointer of the given IR graph. */
-ir_node *get_irg_value_param_base(const ir_graph *irg);
-/** Sets the node that represents the value parameter base pointer of the given IR graph. */
-void     set_irg_value_param_base(ir_graph *irg, ir_node *node);
-
 /** Returns the current block of an IR graph. */
 ir_node *get_irg_current_block(const ir_graph *irg);
 /** Sets the current block of an IR graph. */
@@ -291,6 +285,16 @@ long     get_irg_graph_nr(const ir_graph *irg);
  */
 int get_irg_idx(const ir_graph *irg);
 
+/**
+ * Get the node for an index.
+ * @param irg The graph.
+ * @param idx The index you want the node for.
+ * @return    The node with that index or NULL, if there is no node with that index.
+ * @note      The node you got might be dead.
+ */
+ir_node *get_idx_irn(ir_graph *irg, unsigned idx);
+
+
 /********************************************************************************/
 /* States of an ir_graph.                                                       */
 /********************************************************************************/
@@ -517,6 +521,7 @@ enum ir_resources_enum_t {
 
        /* global (irp) resources */
        IR_RESOURCE_ENTITY_LINK   = 1 << 8,  /**< IR-entity link fields are used. */
+       IR_RESOURCE_TYPE_VISITED  = 1 << 9,  /**< type visited flags */
 
        /* masks */
        IR_RESOURCE_LOCAL_MASK    = 0x00FF,  /**< Mask for all local resources. */
@@ -529,11 +534,26 @@ void ir_reserve_resources(ir_graph *irg, ir_resources_t resources);
 void ir_free_resources(ir_graph *irg, ir_resources_t resources);
 ir_resources_t ir_resources_reserved(const ir_graph *irg);
 #else
-#define ir_reserve_resources(irg,resources)
-#define ir_free_resources(irg,resources)
+#define ir_reserve_resources(irg,resources)  (void)0
+#define ir_free_resources(irg,resources)     (void)0
 #define ir_resources_reserved(irg)           0
 #endif
 
+/**
+ * Graph State
+ */
+typedef enum {
+       IR_GRAPH_STATE_KEEP_MUX = 1 << 0,  /**< should perform no further optimisations on Mux nodes */
+       IR_GRAPH_STATE_ARCH_DEP = 1 << 1,  /**< should not construct more nodes which irarch potentially breaks down */
+} ir_graph_state_t;
+
+/** set some state flags on the graph (this does not clear the other flags) */
+void set_irg_state(ir_graph *irg, ir_graph_state_t state);
+/** clear some state flags of the graph */
+void clear_irg_state(ir_graph *irg, ir_graph_state_t state);
+/** query wether a set of graph state flags are activated */
+int is_irg_state(const ir_graph *irg, ir_graph_state_t state);
+
 /** Normalization: Move Proj nodes into the same block as its predecessors */
 void normalize_proj_nodes(ir_graph *irg);