+/** Returns the Bad node. Use new_Bad() instead!! */
+ir_node *get_irg_bad (const ir_graph *irg);
+void set_irg_bad (ir_graph *irg, ir_node *node);
+
+/** Returns the NoMem node. Use new_NoMem() instead!! */
+ir_node *get_irg_no_mem (const ir_graph *irg);
+void set_irg_no_mem (ir_graph *irg, ir_node *node);
+
+/** Returns the number of value numbers of a graph. */
+int get_irg_n_locs (ir_graph *irg);
+
+/** Returns the graph number. */
+long get_irg_graph_nr(ir_graph *irg);
+
+/********************************************************************************/
+/* States of an ir_graph. */
+/********************************************************************************/
+
+/*
+ information associated with the graph. Optimizations invalidate these
+ states. */
+
+/** The states of an ir graph.
+ *
+ * state phase values: phase_building, phase_high, phase_low, phase_backend.
+ *
+ * The graph is in phase_building during construction of the irgraph.
+ * The construction is finished by a call to finalize_cons().
+ *
+ * Finalize_cons() sets the state to phase_high. All stadard Firm nodes are
+ * allowed.
+ *
+ * To get the irgraph into phase_low all Sel nodes must be removed and
+ * replaced by explicit address computations. SymConst size and
+ * type tag nodes must be removed (@@@ really?). Initialization of
+ * memory allocated by Alloc must be explicit. @@@ More conditions?
+ *
+ * phase_backend is set if architecture specific machine nodes are inserted
+ * (and probally most standard Firm are removed).
+ */
+typedef enum {
+ phase_building,
+ phase_high,
+ phase_low,
+ phase_backend
+} irg_phase_state;
+
+/** returns the phase_state of an IR graph. */
+irg_phase_state get_irg_phase_state (const ir_graph *irg);
+
+/** sets the phase state of an IR graph. */
+void set_irg_phase_state(ir_graph *irg, irg_phase_state state);
+
+#define set_irg_phase_low(irg) set_irg_phase_state(irg, phase_low)
+
+/** state: op_pin_state_pinned
+ The graph is "op_pin_state_pinned" if all nodes are associated with a basic block.
+ It is in state "op_pin_state_floats" if nodes are in arbitrary blocks. In state
+ "op_pin_state_floats" the block predecessor is set in all nodes, but this can be an
+ invalid block, i.e., the block is not a dominator of all the uses of
+ the node.
+ The enum op_pin_state is defined in irop.h. */
+op_pin_state get_irg_pinned (const ir_graph *irg);
+
+/** state: outs_state
+ * Outs are the back edges or def-use edges of ir nodes.
+ * Values: outs_none, outs_consistent, outs_inconsistent */
+typedef enum {
+ outs_none, /**< Outs are not computed, no memory is allocated. */
+ outs_consistent, /**< Outs are computed and correct. */
+ outs_inconsistent /**< Outs have been computed, memory is still allocated,
+ but the graph has been changed since. */
+} irg_outs_state;
+irg_outs_state get_irg_outs_state(const ir_graph *irg);
+void set_irg_outs_inconsistent(ir_graph *irg);
+
+/** state: extended basic block state. */
+typedef enum {
+ extblk_none = 0, /**< No extended basic block information is constructed. Default. */
+ extblk_valid = 1, /**< Extended basic block information is valid. */
+ extblk_invalid = 2 /**< Extended basic block information is constructed but invalid. */
+} irg_extblk_state;
+irg_extblk_state get_irg_extblk_state(const ir_graph *irg);
+void set_irg_extblk_inconsistent(ir_graph *irg);
+
+/** state: dom_state
+ * Signals the state of the dominator / post dominator information.
+ */
+typedef enum {
+ dom_none, /**< dominator are not computed, no memory is allocated */
+ dom_consistent, /**< dominator information is computed and correct */
+ dom_inconsistent /**< dominator information is computed but the graph has been changed since */
+} irg_dom_state;
+
+/** returns the dominator state of an IR graph. */
+irg_dom_state get_irg_dom_state(const 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
+ * data flow of the procedure.
+ */
+typedef enum {
+ loopinfo_none = 0, /**< No loop information is constructed. Default. */
+ loopinfo_constructed = 1, /**< Some kind of loop information is constructed. */
+ loopinfo_valid = 2, /**< Loop information is valid. */
+ 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,
+ /** IntRAprocedural loop information constructed and invalid. */
+ loopinfo_inconsistent = loopinfo_constructed | loopinfo_for_firmjni,
+
+ /** IntERprocedural loop information constructed and valid. */
+ loopinfo_ip_consistent = loopinfo_constructed | loopinfo_inter | loopinfo_valid,
+ /** IntERprocedural loop information constructed and invalid. */
+ loopinfo_ip_inconsistent = loopinfo_constructed | loopinfo_inter,
+
+ /** IntRAprocedural control loop information constructed and valid. */
+ loopinfo_cf_consistent = loopinfo_constructed | loopinfo_cf | loopinfo_valid,
+ /** IntRAprocedural control loop information constructed and invalid. */
+ loopinfo_cf_inconsistent = loopinfo_constructed | loopinfo_cf,