#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
/** 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. */
/** 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. */
*/
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. */
/********************************************************************************/
loopinfo_cf = 4, /**< Loop information constructed for control flow only. */
loopinfo_inter = 8, /**< Loop information for interprocedural view. */
- loopinfo_for_firmjni = 16, /**< A hack for firmjni: all enums must differ as they
- are used in a switch. */
-
/** IntRAprocedural loop information constructed and valid. */
- loopinfo_consistent = loopinfo_constructed | loopinfo_for_firmjni | loopinfo_valid,
+ loopinfo_consistent = loopinfo_constructed | loopinfo_valid,
/** IntRAprocedural loop information constructed and invalid. */
- loopinfo_inconsistent = loopinfo_constructed | loopinfo_for_firmjni,
+ loopinfo_inconsistent = loopinfo_constructed,
/** IntERprocedural loop information constructed and valid. */
loopinfo_ip_consistent = loopinfo_constructed | loopinfo_inter | loopinfo_valid,
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);