X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flower%2Flower_dw.c;h=d516b31dcf278d73bf94f5529a822c590fe37849;hb=edb11cbddcf9e4fef1bde33d576003af8a6a3323;hp=c8bceeb5ad06dcc753111ed7e162a08e21532600;hpb=1adbf5a888bc38944df7db0c201b2a68ccb265e1;p=libfirm diff --git a/ir/lower/lower_dw.c b/ir/lower/lower_dw.c index c8bceeb5a..d516b31dc 100644 --- a/ir/lower/lower_dw.c +++ b/ir/lower/lower_dw.c @@ -57,6 +57,7 @@ #include "pmap.h" #include "pdeq.h" #include "irdump.h" +#include "array_t.h" #include "xmalloc.h" /** A map from mode to a primitive type. */ @@ -998,24 +999,25 @@ static void lower_Shrs(ir_node *node, ir_mode *mode, lower_env_t *env) { if (tarval_is_long(tv) && get_tarval_long(tv) >= (long)get_mode_size_bits(mode)) { - ir_node *block = get_nodes_block(node); - ir_node *left = get_Shrs_left(node); - long shf_cnt = get_tarval_long(tv) - get_mode_size_bits(mode); + ir_node *block = get_nodes_block(node); + ir_node *left = get_Shrs_left(node); + long shf_cnt = get_tarval_long(tv) - get_mode_size_bits(mode); + int idx = get_irn_idx(left); + ir_node *low; ir_node *c; - int idx = get_irn_idx(left); left = env->entries[idx]->high_word; idx = get_irn_idx(node); if (shf_cnt > 0) { - ir_node *tmp; - c = new_r_Const_long(irg, block, mode_Iu, shf_cnt); - tmp = new_r_Shrs(irg, block, left, c, mode); - /* low word is expected to have mode_Iu */ - env->entries[idx]->low_word = new_r_Conv(irg, block, tmp, mode_Iu); + c = new_r_Const_long(irg, block, mode_Iu, shf_cnt); + low = new_r_Shrs(irg, block, left, c, mode); } else { - env->entries[idx]->low_word = left; + low = left; } /* if */ + /* low word is expected to have mode_Iu */ + env->entries[idx]->low_word = new_r_Conv(irg, block, low, mode_Iu); + c = new_r_Const_long(irg, block, mode_Iu, get_mode_size_bits(mode) - 1); env->entries[idx]->high_word = new_r_Shrs(irg, block, left, c, mode); @@ -1092,6 +1094,8 @@ static void lower_Rotl(ir_node *node, ir_mode *mode, lower_env_t *env) { ir_node *left = get_Rotl_left(node); ir_node *h, *l; int idx = get_irn_idx(left); + (void) right; + (void) mode; assert(get_mode_arithmetic(mode) == irma_twos_complement && is_Const(right) && tarval_is_long(get_Const_tarval(right)) &&