X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firopt_t.h;h=468b3822744b9654bc4793e435b63b30a13046d6;hb=daba4aa82ec48b142c6d48d9a4b2d0bfffc92683;hp=745bde8e23e46277a00016fb42f31b2005b933cb;hpb=bb9f2e36362333c6635b89f5258171b06c786608;p=libfirm diff --git a/ir/ir/iropt_t.h b/ir/ir/iropt_t.h index 745bde8e2..468b38227 100644 --- a/ir/ir/iropt_t.h +++ b/ir/ir/iropt_t.h @@ -21,11 +21,11 @@ * @file * @brief iropt --- optimizations intertwined with IR construction -- private header. * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Michael Beck - * @version $Id$ */ #ifndef FIRM_IR_IROPT_T_H #define FIRM_IR_IROPT_T_H +#include #include "irop_t.h" #include "iropt.h" #include "irnode_t.h" @@ -51,21 +51,20 @@ 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. - * */ -pset *new_identities(void); +void new_identities(ir_graph *irg); /** * Deletes a identities value table. * * @param value_table the identity set */ -void del_identities(pset *value_table); +void del_identities(ir_graph *irg); /** * Add a node to the identities value table. */ -void add_identities(pset *value_table, ir_node *node); +void add_identities(ir_node *node); /** * Compare function for two nodes in the hash table. Gets two @@ -78,11 +77,19 @@ int identities_cmp(const void *elt, const void *key); * Looks up the node in a hash table, enters it in the table * if it isn't there yet. */ -ir_node *identify_remember(pset *value_table, ir_node *n); +ir_node *identify_remember(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); @@ -93,7 +100,7 @@ ir_node *optimize_in_place_2(ir_node *n); * returning tarval_bad otherwise. * No calculations are done here, just a lookup. */ -typedef tarval *(*value_of_func)(const ir_node *self); +typedef ir_tarval *(*value_of_func)(const ir_node *self); extern value_of_func value_of_ptr; @@ -107,20 +114,69 @@ void set_value_of_func(value_of_func func); /** * Returns the associated tarval of a node. */ -static inline tarval * -value_of(const ir_node *n) { +static inline ir_tarval *value_of(const ir_node *n) +{ return value_of_ptr(n); } /** - * Sets the default operations for an ir_op_ops. + * returns true if a value becomes zero when converted to mode @p mode + */ +bool ir_zero_when_converted(const ir_node *node, ir_mode *dest_mode); + +int ir_mux_is_abs(const ir_node *sel, const ir_node *mux_false, + const ir_node *mux_true); + +ir_node *ir_get_abs_op(const ir_node *sel, ir_node *mux_false, + ir_node *mux_true); + +/** + * return true if the Mux node will be optimized away. This can be used for + * the if-conversion callback. Allowing these Muxes should be always safe, even + * if the backend cannot handle them. + */ +bool ir_is_optimizable_mux(const ir_node *sel, const ir_node *mux_false, + const ir_node *mux_true); + +/** + * Set the default hash operation in an ir_op_ops. * * @param code the opcode for the default operation * @param ops the operations initialized + */ +void firm_set_default_hash(unsigned code, ir_op_ops *ops); + +/** + * Set the default computed_value evaluator in an ir_op_ops. * - * @return - * The operations. + * @param code the opcode for the default operation + * @param ops the operations initialized */ -ir_op_ops *firm_set_default_operations(ir_opcode code, ir_op_ops *ops); +void firm_set_default_computed_value(ir_opcode code, ir_op_ops *ops); + +/** + * Sets the default equivalent node operation for an ir_op_ops. + * + * @param code the opcode for the default operation + * @param ops the operations initialized + */ +void firm_set_default_equivalent_node(ir_opcode code, ir_op_ops *ops); + +/** + * Sets the default transform node operation for an ir_op_ops. + * + * @param code the opcode for the default operation + * @param ops the operations initialized + */ +void firm_set_default_transform_node(ir_opcode code, ir_op_ops *ops); + +/** + * Set the default node attribute compare operation for an ir_op_ops. + * + * @param code the opcode for the default operation + * @param ops the operations initialized + */ +void firm_set_default_node_cmp_attr(ir_opcode code, ir_op_ops *ops); + #endif