/** 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. */
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);