From: Matthias Braun Date: Mon, 30 Jan 2012 18:05:39 +0000 (+0100) Subject: lower_dw: don't fail on Tuple-nodes X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=1af3ac6e8b59f30ec72d56bb2a12082fd1a2d58d;p=libfirm lower_dw: don't fail on Tuple-nodes --- diff --git a/ir/lower/lower_dw.c b/ir/lower/lower_dw.c index d3b1da50b..6d34e1d82 100644 --- a/ir/lower/lower_dw.c +++ b/ir/lower/lower_dw.c @@ -1207,6 +1207,23 @@ static void lower_Not(ir_node *node, ir_mode *mode) ir_set_dw_lowered(node, res_low, res_high); } +static void lower_Proj(ir_node *node, ir_mode *op_mode) +{ + ir_mode *mode = get_irn_mode(node); + ir_node *pred; + (void)op_mode; + if (mode != env->high_signed && mode != env->high_unsigned) + return; + /* skip tuples */ + pred = get_Proj_pred(node); + if (is_Tuple(pred)) { + long pn = get_Proj_proj(node); + ir_node *op = get_irn_n(pred, pn); + const lower64_entry_t *entry = get_node_entry(op); + ir_set_dw_lowered(node, entry->low_word, entry->high_word); + } +} + static bool is_equality_cmp(const ir_node *node) { ir_relation relation = get_Cmp_relation(node); @@ -3064,6 +3081,7 @@ void ir_prepare_dw_lowering(const lwrdw_param_t *new_param) ir_register_dw_lower_function(op_Mux, lower_Mux); ir_register_dw_lower_function(op_Not, lower_Not); ir_register_dw_lower_function(op_Or, lower_Or); + ir_register_dw_lower_function(op_Proj, lower_Proj); ir_register_dw_lower_function(op_Return, lower_Return); ir_register_dw_lower_function(op_Shl, lower_Shl); ir_register_dw_lower_function(op_Shr, lower_Shr);