3 * File name: ir/ir/irgmod.h
4 * Purpose: Support for ir graph modification.
5 * Author: Martin Trapp, Christian Schaefer
6 * Modified by: Goetz Lindenmaier
9 * Copyright: (c) 1998-2003 Universität Karlsruhe
10 * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
17 * ir graph modification.
19 * @author Martin Trapp, Christian Schaefer
28 /** Exchanges two nodes by conserving edges leaving old (i.e.,
29 pointers pointing to old). Turns the old node into an Id. */
30 void exchange (ir_node *old, ir_node *nw);
32 /** Turns a node into a "useless" Tuple.
34 * Turns a node into a "useless" Tuple. The Tuple node just forms a tuple
35 * from several inputs. The predecessors of the tuple have to be
36 * set by hand. The block predecessor automatically remains the same.
37 * This is useful if a node returning a tuple is removed, but the Projs
38 * extracting values from the tuple are not available.
40 * @param node The node to be turned into a tuple.
41 * @param arity The number of values formed into a Tuple.
43 void turn_into_tuple (ir_node *node, int arity);
45 /** Walks over the passed ir graph and collects all Phi nodes as a
46 list built with the link field in their corresponding block.
47 Further it collects all Proj nodes in a list of the node producing
48 the tuple. In case of nested tuples the Projs are collected in the
49 node producing the outermost Tuple. */
50 void collect_phiprojs(ir_graph *irg);
52 /** Parts a block into two. This is useful to insert other blocks within a
54 Adds a new block (new_block) in the control flow before the block
55 (old_block) of node. Moves node and its predecessors from old_block to
56 new_block. Moves all Projs that depend on moved nodes and are in old_block
57 to new_block. Moves all Phi nodes from old_block to new_block. To achieve
58 this the routine assumes that all Phi nodes are in a list (using the link
59 field) in the link field of old_block. Further it assumes that all Proj nodes
60 are accessible by the link field of the nodes producing the Tuple. This
61 can be established by collect_phiprojs(). part_block conserves this property.
62 Adds a Jmp node to new_block that jumps to old_block.
63 Assumes that node is contained in current_ir_graph. Sets current_block in
64 this ir_graph to new_block. */
65 void part_block(ir_node *node);
67 #endif /* ifndef _IRGMOD_H_ */