+ir_graph *get_current_ir_graph(void);
+void set_current_ir_graph(ir_graph *graph);
+
+/** This flag indicate the current view. The behaviour of some methods
+ * (get_irn_*, set_irn_*) is influenced by this flag. */
+extern bool interprocedural_view;
+bool get_interprocedural_view(void);
+void set_interprocedural_view(bool state);
+
+/** Create a new ir graph to built ir for a procedure.
+ *
+ * ent is the entity representing this procedure, i.e., the type of the
+ * entity must be of a method type. The constructor automatically sets the
+ * field irg of the entity as well as current_ir_graph to the new ir graph.
+ * n_loc is the number of local variables in this procedure including
+ * the procedure parameters.
+ * The constructor adds the new irgraph to the list in ir_prog.
+ * The state of the ir graph is: phase_building, op_pin_state_pinned, outs_none. */
+ir_graph *new_ir_graph (entity *ent, int n_loc);
+
+/** Frees the passed irgraph.
+ * Deallocates all nodes in this graph and the ir_graph structure.
+ * Sets the field irgraph in the corresponding entity to NULL.
+ * Does not remove the irgraph from the list in irprog (requires
+ * inefficient search, call remove_irp_irg by hand).
+ * Does not free types, entities or modes that are used only by this
+ * graph, nor the entity standing for this graph.
+ */
+void free_ir_graph (ir_graph *irg);
+
+/* --- access routines for all ir_graph attributes --- */
+
+/**
+ * Checks whether a pointer points to a ir graph.
+ *
+ * @param thing an arbitrary pointer
+ *
+ * @return
+ * true if the thing is a ir graph, else false
+ */
+int is_ir_graph(void *thing);
+
+/* #define get_irg_entity get_irg_ent */
+/* #define set_irg_entity set_irg_ent */
+entity *get_irg_entity (ir_graph *irg);
+void set_irg_entity (ir_graph *irg, entity *ent);
+
+type *get_irg_frame_type (ir_graph *irg);
+void set_irg_frame_type (ir_graph *irg, type *ftp);
+/* To test for a frame type. O(#irgs) if ftp is class type. */
+int is_frame_type (type *ftp);
+
+ir_node *get_irg_start_block (ir_graph *irg);
+void set_irg_start_block (ir_graph *irg, ir_node *node);
+
+ir_node *get_irg_start (ir_graph *irg);
+void set_irg_start (ir_graph *irg, ir_node *node);
+
+ir_node *get_irg_end_block (ir_graph *irg);
+void set_irg_end_block (ir_graph *irg, ir_node *node);
+
+ir_node *get_irg_end (ir_graph *irg);
+void set_irg_end (ir_graph *irg, ir_node *node);
+
+/* The fields end_reg and end_except contain the end nodes of the
+ interprocedural view. If the view is not constructed they contain
+ the nomal end node. */
+ir_node *get_irg_end_reg (ir_graph *irg);
+void set_irg_end_reg (ir_graph *irg, ir_node *node);
+
+ir_node *get_irg_end_except (ir_graph *irg);
+void set_irg_end_except (ir_graph *irg, ir_node *node);
+
+
+/* @@@ oblivious, no more supported. */
+ir_node *get_irg_cstore (ir_graph *irg);
+void set_irg_cstore (ir_graph *irg, ir_node *node);
+/* end oblivious */
+
+/** Returns the node that represents the frame pointer. */
+ir_node *get_irg_frame (ir_graph *irg);
+/** Sets the node that represents the frame pointer. */
+void set_irg_frame (ir_graph *irg, ir_node *node);
+
+/** Returns the node that represents the global pointer. */
+ir_node *get_irg_globals (ir_graph *irg);
+/** Sets the node that represents the global pointer. */
+void set_irg_globals (ir_graph *irg, ir_node *node);
+
+/** Returns the node that represents the initial memory. */
+ir_node *get_irg_initial_mem (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 (ir_graph *irg);
+/** Sets the node that represents the argument pointer. */
+void set_irg_args (ir_graph *irg, ir_node *node);
+
+/** Returns the current block of a graph. */
+ir_node *get_irg_current_block (ir_graph *irg);
+/** Sets the current block of a graph. */
+void set_irg_current_block (ir_graph *irg, ir_node *node);
+
+/* Use new_Bad() instead!! */
+ir_node *get_irg_bad (ir_graph *irg);
+void set_irg_bad (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.
+ *
+ * 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 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
+ * typetag nodes must be removed (@@@ really?). Initialization of
+ * memory allocated by Alloc must be explicit. @@@ More conditions?
+ *
+ */
+typedef enum {
+ phase_building,
+ phase_high,
+ phase_low
+} irg_phase_state;
+
+irg_phase_state get_irg_phase_state (ir_graph *irg);
+void set_irg_phase_low(ir_graph *irg);
+
+/** 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 (ir_graph *irg);
+
+/** state: outs_state
+ Outs are the back edges or def-use edges.
+ Values: outs_none, outs_consistent, outs_inconsistent
+ 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. */
+typedef enum {
+ outs_none,
+ outs_consistent,
+ outs_inconsistent
+} irg_outs_state;
+irg_outs_state get_irg_outs_state(ir_graph *irg);
+void set_irg_outs_inconsistent(ir_graph *irg);