+/** Returns the node that represents the tls pointer. */
+ir_node *get_irg_tls (const ir_graph *irg);
+/** Sets the node that represents the tls pointer. */
+void set_irg_tls (ir_graph *irg, ir_node *node);
+
+/** Returns the node that represents the initial memory. */
+ir_node *get_irg_initial_mem (const ir_graph *irg);
+/** Sets the node that represents the initial memory. */
+void set_irg_initial_mem (ir_graph *irg, ir_node *node);
+
+/** Returns the node that represents the argument pointer. */
+ir_node *get_irg_args (const ir_graph *irg);
+/** Sets the node that represents the argument pointer. */
+void set_irg_args (ir_graph *irg, ir_node *node);
+
+/** Returns the node that represents the value parameter base pointer. */
+ir_node *get_irg_value_param_base (const ir_graph *irg);
+/** Sets the node that represents the value parameter base pointer. */
+void set_irg_value_param_base (ir_graph *irg, ir_node *node);
+
+/** Returns an array of the nodes of the argument pointer. */
+ir_node **get_irg_proj_args (const ir_graph *irg);
+/** Sets the array of the nodes of the argument pointer. */
+void set_irg_proj_args (ir_graph *irg, ir_node **nodes);
+
+/** Returns the current block of a graph. */
+ir_node *get_irg_current_block (const ir_graph *irg);
+/** Sets the current block of a graph. */
+void set_irg_current_block (ir_graph *irg, ir_node *node);
+
+/** 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 standard 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 probably 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,
+
+ /** IntERprocedural control loop information constructed and valid. */
+ loopinfo_cf_ip_consistent = loopinfo_constructed | loopinfo_cf | loopinfo_inter | loopinfo_valid,
+ /** IntERprocedural control loop information constructed and invalid. */
+ loopinfo_cf_ip_inconsistent = loopinfo_constructed | loopinfo_cf | loopinfo_inter
+} irg_loopinfo_state;
+
+/** Return the current loop information state. */
+irg_loopinfo_state get_irg_loopinfo_state(const ir_graph *irg);
+
+/** Sets the current loop information state. */
+void set_irg_loopinfo_state(ir_graph *irg, irg_loopinfo_state s);
+
+/** Sets the loop information state to the appropriate inconsistent state.
+ * If state is 'none' does not change. */
+void set_irg_loopinfo_inconsistent(ir_graph *irg);
+/** Sets the loop information state to the appropriate inconsistent state.
+ * If state is 'none' does not change.
+ * Does this for all irgs. */
+void set_irp_loopinfo_inconsistent(void);
+
+/** state: callee_information_state
+ * Call nodes contain a list of possible callees. This list must be
+ * computed by an analysis.
+ *
+ * It's strange that this state is administered on irg basis, as the
+ * information must be computed for the whole program, or not?
+ */
+typedef enum {
+ irg_callee_info_none,
+ irg_callee_info_consistent,
+ irg_callee_info_inconsistent
+} irg_callee_info_state;
+
+/** returns the callee_info_state of an IR graph. */
+irg_callee_info_state get_irg_callee_info_state(const ir_graph *irg);
+
+/** sets the callee_info_state of an IR graph. */
+void set_irg_callee_info_state(ir_graph *irg, irg_callee_info_state s);
+
+/** property:
+ * Tells how to handle an ir graph in inlineing.
+ */
+typedef enum {
+ irg_inline_any, /**< No restriction on inlineing. Default. */
+ irg_inline_forbidden, /**< The graph may not be inlined. */
+ irg_inline_recomended, /**< The graph should be inlined. */
+ irg_inline_forced, /**< The graph must be inlined. */
+ irg_inline_forced_no_body /**< The graph must be inlined. No body is allowed
+ to be emitted. */
+} irg_inline_property;
+
+/** Returns the inline property of a graph. */
+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);
+
+/**
+ * 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().
+ */
+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, mtp_additional_property flag);
+
+/** A void * field to link arbitrary information to the node. */
+void set_irg_link (ir_graph *irg, void *thing);
+void *get_irg_link (const ir_graph *irg);
+
+/** Increments visited flag by one.
+ * @see also: get_irn_visited() get_irg_block_visited(). */
+void inc_irg_visited (ir_graph *irg);
+unsigned long get_irg_visited (const ir_graph *irg);
+void set_irg_visited (ir_graph *irg, unsigned long i);
+/** An interprocedural flag valid for all irgs.
+ * @see also: get_irn_visited() get_irg_block_visited(). */
+unsigned long get_max_irg_visited (void);
+void set_max_irg_visited (int val);
+unsigned long inc_max_irg_visited (void);
+
+/** Increments block_visited by one.
+ * @see also: get_irn_visited() get_irg_block_visited(). */
+void inc_irg_block_visited (ir_graph *irg);
+unsigned long get_irg_block_visited (const ir_graph *irg);
+void set_irg_block_visited (ir_graph *irg, unsigned long i);
+
+/** Flags indicating whether or not we are inside an irg/block walk. */
+void set_inside_block_walk(ir_graph *irg);
+void clear_inside_block_walk(ir_graph *irg);
+unsigned inside_block_walk(const ir_graph *irg);
+void set_inside_irg_walk(ir_graph *irg);
+void clear_inside_irg_walk(ir_graph *irg);
+unsigned inside_irg_walk(const ir_graph *irg);