libFirm
|
Construction of Confirm nodes. More...
Go to the source code of this file.
Functions | |
void | construct_confirms (ir_graph *irg) |
Inject Confirm nodes into a graph. | |
ir_graph_pass_t * | construct_confirms_pass (const char *name) |
Creates an ir_graph pass for construct_confirms(). | |
void | remove_confirms (ir_graph *irg) |
Remove all Confirm nodes from a graph. | |
ir_graph_pass_t * | remove_confirms_pass (const char *name) |
Creates an ir_graph pass for remove_confirms(). |
void construct_confirms | ( | ir_graph * | irg | ) |
Inject Confirm nodes into a graph.
irg | the graph |
Confirm nodes carry confirmation information, such as a relation between a value a and another value (or a constant) b.
These allows to do some range dependent optimizations for Cmp, Abs, Min, Max nodes as well as bounds checking deletion.
The heap analysis might profit also. On the other side, Confirm nodes disturb local optimizations, because patterns are destroyed.
It is possible to avoid this by skipping Confirm nodes, but this is not implemented and is not cheap. The same happens with Casts nodes too. The current solution is to remove Confirms at a later pass.
ir_graph_pass_t* construct_confirms_pass | ( | const char * | name | ) |
Creates an ir_graph pass for construct_confirms().
name | the name of this pass or NULL |
void remove_confirms | ( | ir_graph * | irg | ) |
Remove all Confirm nodes from a graph.
Note that local_optimize() can handle this if the remove Confirm node setting is on (set_opt_remove_Confirm(1)).
ir_graph_pass_t* remove_confirms_pass | ( | const char * | name | ) |
Creates an ir_graph pass for remove_confirms().
name | the name of this pass or NULL |