Some access routines for visited flags in entity.h, irnode.h,
[libfirm] / ir / ir / irgmod.h
1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
3 **
4 ** Authors: Martin Trapp, Christian Schaefer
5 **
6 ** irgmod.h: ir graph modification
7 */
8
9 /* $Id$ */
10
11 # ifndef _IRGMOD_H_
12 # define _IRGMOD_H_
13
14 # include "irnode.h"
15
16 /* Exchanges two nodes by conserving edges leaving old (i.e., pointers
17    pointing to old).  Turns the old node into an Id. Requires that
18    current_ir_graph is set properly. */
19 inline void exchange (ir_node *old, ir_node *new);
20
21 /* Turns a node into a "useless" Tuple.  The Tuple node just forms a tuple
22    from several inputs.  The predecessors of the tuple have to be
23    set by hand.  The block predecessor automatically remains the same.
24    This is useful if a node returning a tuple is removed, but the Projs
25    extracting values from the tuple are not available. */
26 void turn_into_tuple (ir_node *node, int arity);
27
28 /* Walks over the passed ir graph and collects all Phi nodes as a
29    list built with the link field in their corresponding block.
30    Further it collects all Proj nodes in a list of the node producing
31    the tuple. In case of nested tuples the Projs are collected in the
32    node producing the outermost Tuple. */
33 void collect_phiprojs(ir_graph *irg);
34
35 /* Parts a block into two.  This is useful to insert other blocks within a
36    given block.
37    Adds a new block (new_block) in the control flow before the block
38    (old_block) of node.  Moves node and its predecessors from old_block to
39    new_block.  Moves all Projs that depend on moved nodes and are in old_block
40    to new_block. Moves all Phi nodes from old_block to new_block.  To achieve
41    this the routine assumes that all Phi nodes are in a list (using the link
42    field) in the link field of old_block.  Further it assumes that all Proj nodes
43    are accessible by the link field of the nodes producing the Tuple. This
44    can be established by collect_phiprojs().  part_block conserves this property.
45    Adds a Jmp node to new_block that jumps to old_block.
46    Assumes that node is contained in current_ir_graph.  Sets current_block in
47    this ir_graph to new_block. */
48 void part_block(ir_node *node);
49
50 #endif /* ifndef _IRGMOD_H_ */