X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbetranshlp.h;h=a45e2e85f243ed2ae949cd8175b6baa289b14c69;hb=c57decb6b15b5490d4c3e9e546d8024556e2263f;hp=eb5663ba2f44001aac5b81d25a15453df7c6dff5;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/ir/be/betranshlp.h b/ir/be/betranshlp.h index eb5663ba2..a45e2e85f 100644 --- a/ir/be/betranshlp.h +++ b/ir/be/betranshlp.h @@ -22,18 +22,17 @@ * @brief be transform helper extracted from the ia32 backend. * @author Matthias Braun, Michael Beck * @date 14.06.2007 - * @version $Id$ */ #ifndef FIRM_BE_BETRANSHLP_H #define FIRM_BE_BETRANSHLP_H +#include "be_types.h" #include "firm_types.h" -#include "beirg.h" /** * A callback to pre-transform some nodes before the transformation starts. */ -typedef void (arch_pretrans_nodes)(void *arch_cg); +typedef void (arch_pretrans_nodes)(void); /** * The type of a transform function. @@ -49,9 +48,10 @@ ir_node *be_pre_transform_node(ir_node *place); ir_node *be_transform_node(ir_node *node); /** - * returns an anchor from the graph before the transformation + * Creates a new phi (needs some special handling since we can't transform + * all predecessors yet). */ -ir_node *be_get_old_anchor(int anchor); +ir_node *be_transform_phi(ir_node *node, const arch_register_req_t *req); /** * Duplicate all dependency edges of a node. @@ -63,6 +63,13 @@ void be_duplicate_deps(ir_node *old_node, ir_node *new_node); */ ir_node *be_duplicate_node(ir_node *node); +/** clear transform functions and sets some virtual nodes like + * Start, Sync, Pin to the duplication transformer */ +void be_start_transform_setup(void); + +/** register a transform function for a specific node type */ +void be_set_transform_function(ir_op *op, be_transform_func func); + /** * Associate an old node with a transformed node. Uses link field. */ @@ -81,6 +88,22 @@ void be_enqueue_preds(ir_node *node); /** * Transform a graph. Transformers must be registered first. */ -void be_transform_graph(be_irg_t *birg, arch_pretrans_nodes *func, void *cg_env); +void be_transform_graph(ir_graph *irg, arch_pretrans_nodes *func); + +typedef bool (*upper_bits_clean_func)(const ir_node *node, ir_mode *mode); + +/** + * register a test function for be_upper_bits_clean for a specific node + * type. + */ +void be_set_upper_bits_clean_function(ir_op *op, upper_bits_clean_func func); + +/** + * returns true if it is assured, that the upper bits of a node are "clean" + * which means for a 16 or 8 bit value, that the upper bits in the register + * are 0 for unsigned and a copy of the last significant bit for signed + * numbers. + */ +bool be_upper_bits_clean(const ir_node *node, ir_mode *mode); -#endif /* FIRM_BE_BETRANSHLP_H */ +#endif