irverify: remove load/store from entity verification
[libfirm] / include / libfirm / irgmod.h
index 75a3737..038dd13 100644 (file)
  * @file
  * @brief    Support for ir graph modification.
  * @author   Martin Trapp, Christian Schaefer, Goetz Lindenmaier
- * @version  $Id$
  */
 #ifndef FIRM_IR_IRGMOD_H
 #define FIRM_IR_IRGMOD_H
 
 #include "firm_types.h"
+#include "begin.h"
 
-/** Exchanges two nodes by conserving edges leaving old (i.e.,
-   pointers pointing to old).  Turns the old node into an Id. */
-void exchange(ir_node *old, ir_node *nw);
+/**
+ * Exchanges two nodes by conserving edges leaving old (i.e.,
+ * pointers pointing to old).
+ * The nodes op will be changed to op_Deleted and you must not do anything with
+ * the node anymore except testing its op.
+ */
+FIRM_API void exchange(ir_node *old, ir_node *nw);
 
 /** Turns a node into a "useless" Tuple.
  *
  *  Turns a node into a "useless" Tuple.  The Tuple node just forms a tuple
- *  from several inputs.  The predecessors of the tuple have to be
- *  set by hand.  The block predecessor automatically remains the same.
+ *  from several inputs. All predecessors of the tuple are set to bad and
+ *  should be replaced if necssary. The block predecessor remains the same.
  *  This is useful if a node returning a tuple is removed, but the Projs
  *  extracting values from the tuple are not available.
  *
  *  @param node The node to be turned into a tuple.
  *  @param arity The number of values formed into a Tuple.
  */
-void turn_into_tuple(ir_node *node, int arity);
+FIRM_API void turn_into_tuple(ir_node *node, int arity);
 
 /** Walks over the passed IR graph and collects all Phi nodes as a
   * list in their corresponding block (using get_Block_phis() API).
@@ -52,7 +56,7 @@ void turn_into_tuple(ir_node *node, int arity);
   * node producing the outermost Tuple.
   * All other link fields are cleared afterwards.
   */
-void collect_phiprojs(ir_graph *irg);
+FIRM_API void collect_phiprojs(ir_graph *irg);
 
 /** Parts a block into two.  This is useful to insert other blocks within a
  *  given block.
@@ -61,22 +65,30 @@ void collect_phiprojs(ir_graph *irg);
  * (old_block) of node.  Moves node and its predecessors from old_block to
  * new_block.  Moves all Projs that depend on moved nodes and are in old_block
  * to new_block. Moves all Phi nodes from old_block to new_block.  To achieve
- * this the routine assumes that all Phi nodes are in the Phi list (see get_Block_phis())
- * of old_block.  Further it assumes that all Proj nodes are accessible by the link field
- * of the nodes producing the Tuple. This
- * can be established by collect_phiprojs().  part_block conserves this property.
+ * this the routine assumes that all Phi nodes are in the Phi list (see
+ * get_Block_phis()) of old_block.
+ * Further it assumes that all Proj nodes are accessible by the link field of
+ * the nodes producing the Tuple. This can be established by collect_phiprojs().
+ * part_block() conserves this property.
  * Adds a Jmp node to new_block that jumps to old_block.
- * Assumes that node is contained in current_ir_graph.  Sets current_block in
- * this ir_graph to new_block.
  *
  * @param node   The node were to break the block
  */
-void part_block(ir_node *node);
+FIRM_API void part_block(ir_node *node);
+
+/**
+ * Same as part_block() but works with out-edges so you don't have to call
+ * collect_phiprojs.
+ * This variant also removes all predecessors of the old block and returns
+ * it. You are responsible to add control flow predecessors to it.
+ */
+FIRM_API ir_node *part_block_edges(ir_node *node);
 
 /**
- * Kill a node by setting its predecessors to Bad and finally
- * exchange the node by Bad itself.
+ * Kill a node.  No other node may have this node as operand.
  */
-void kill_node(ir_node *node);
+FIRM_API void kill_node(ir_node *node);
+
+#include "end.h"
 
-#endif /* FIRM_IR_IRGMOD_H */
+#endif