X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firopt_t.h;h=0345b738d1d80a4d96d14887da1ef4997baccb02;hb=af0115376ccdcc72e0643caf221407218f4504f0;hp=5e95c801dd4fb803412767dd1a8df6597a071bd5;hpb=0c8ec6efe050e425be99454315e4f58b0976a38a;p=libfirm diff --git a/ir/ir/iropt_t.h b/ir/ir/iropt_t.h index 5e95c801d..0345b738d 100644 --- a/ir/ir/iropt_t.h +++ b/ir/ir/iropt_t.h @@ -26,22 +26,28 @@ #ifndef FIRM_IR_IROPT_T_H #define FIRM_IR_IROPT_T_H +#include "irop_t.h" #include "iropt.h" #include "irnode_t.h" #include "pset.h" #include "tv.h" -ir_node *equivalent_node(ir_node *n); - /** * Calculate a hash value of a node. - * The hash value is calculated from the nodes predecessors. - * Special handling for Const and SymConst nodes (these don't have predecessors). * * @param node The IR-node */ unsigned ir_node_hash(const ir_node *node); +/** + * equivalent_node() returns a node equivalent to input n. It skips all nodes that + * perform no actual computation, as, e.g., the Id nodes. It does not create + * new nodes. It is therefore safe to free n if the node returned is not n. + * If a node returns a Tuple we can not just skip it. If the size of the + * in array fits, we transform n into a tuple (e.g., Div). + */ +ir_node *equivalent_node(ir_node *n); + /** * Creates a new value table used for storing CSE identities. * The value table is used to identify common expressions. @@ -77,6 +83,14 @@ ir_node *identify_remember(pset *value_table, ir_node *n); /** Visit each node in the value table of a graph. */ void visit_all_identities(ir_graph *irg, irg_walk_func visit, void *env); +/** + * Normalize a node by putting constants (and operands with larger + * node index) on the right (operator side). + * + * @param n The node to normalize + */ +void ir_normalize_node(ir_node *n); + ir_node *optimize_node(ir_node *n); ir_node *optimize_in_place_2(ir_node *n); @@ -101,7 +115,7 @@ void set_value_of_func(value_of_func func); /** * Returns the associated tarval of a node. */ -static INLINE tarval * +static inline tarval * value_of(const ir_node *n) { return value_of_ptr(n); }