Mercurial > hg > CbC > CbC_gcc
diff gcc/tree-ssa-pre.c @ 48:9907f3135723
update CbC on GCC from 4.4.2 to 4.4.3.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Feb 2010 17:48:31 +0900 |
parents | 3bfb6c00c1e0 |
children | 77e2b8dfacca |
line wrap: on
line diff
--- a/gcc/tree-ssa-pre.c Fri Jan 29 12:18:08 2010 +0900 +++ b/gcc/tree-ssa-pre.c Sun Feb 07 17:48:31 2010 +0900 @@ -453,9 +453,6 @@ cleaned up. */ static bitmap need_eh_cleanup; -/* Which expressions have been seen during a given phi translation. */ -static bitmap seen_during_translate; - /* The phi_translate_table caches phi translations for a given expression and predecessor. */ @@ -1400,14 +1397,12 @@ /* Translate EXPR using phis in PHIBLOCK, so that it has the values of - the phis in PRED. SEEN is a bitmap saying which expression we have - translated since we started translation of the toplevel expression. - Return NULL if we can't find a leader for each part of the - translated expression. */ + the phis in PRED. Return NULL if we can't find a leader for each part + of the translated expression. */ static pre_expr -phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, - basic_block pred, basic_block phiblock, bitmap seen) +phi_translate (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, + basic_block pred, basic_block phiblock) { pre_expr oldexpr = expr; pre_expr phitrans; @@ -1422,16 +1417,6 @@ if (phitrans) return phitrans; - /* Prevent cycles when we have recursively dependent leaders. This - can only happen when phi translating the maximal set. */ - if (seen) - { - unsigned int expr_id = get_expression_id (expr); - if (bitmap_bit_p (seen, expr_id)) - return NULL; - bitmap_set_bit (seen, expr_id); - } - switch (expr->kind) { /* Constants contain no values that need translation. */ @@ -1455,10 +1440,10 @@ continue; else { + pre_expr leader, result; unsigned int op_val_id = VN_INFO (newnary.op[i])->value_id; - pre_expr leader = find_leader_in_sets (op_val_id, set1, set2); - pre_expr result = phi_translate_1 (leader, set1, set2, - pred, phiblock, seen); + leader = find_leader_in_sets (op_val_id, set1, set2); + result = phi_translate (leader, set1, set2, pred, phiblock); if (result && result != leader) { tree name = get_representative_for (result); @@ -1559,8 +1544,7 @@ { unsigned int op_val_id = VN_INFO (op0)->value_id; leader = find_leader_in_sets (op_val_id, set1, set2); - opresult = phi_translate_1 (leader, set1, set2, - pred, phiblock, seen); + opresult = phi_translate (leader, set1, set2, pred, phiblock); if (opresult && opresult != leader) { tree name = get_representative_for (opresult); @@ -1577,8 +1561,7 @@ { unsigned int op_val_id = VN_INFO (op1)->value_id; leader = find_leader_in_sets (op_val_id, set1, set2); - opresult = phi_translate_1 (leader, set1, set2, - pred, phiblock, seen); + opresult = phi_translate (leader, set1, set2, pred, phiblock); if (opresult && opresult != leader) { tree name = get_representative_for (opresult); @@ -1594,8 +1577,7 @@ { unsigned int op_val_id = VN_INFO (op2)->value_id; leader = find_leader_in_sets (op_val_id, set1, set2); - opresult = phi_translate_1 (leader, set1, set2, - pred, phiblock, seen); + opresult = phi_translate (leader, set1, set2, pred, phiblock); if (opresult && opresult != leader) { tree name = get_representative_for (opresult); @@ -1724,20 +1706,6 @@ } } -/* Translate EXPR using phis in PHIBLOCK, so that it has the values of - the phis in PRED. - Return NULL if we can't find a leader for each part of the - translated expression. */ - -static pre_expr -phi_translate (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, - basic_block pred, basic_block phiblock) -{ - bitmap_clear (seen_during_translate); - return phi_translate_1 (expr, set1, set2, pred, phiblock, - seen_during_translate); -} - /* For each expression in SET, translate the values through phi nodes in PHIBLOCK using edge PHIBLOCK->PRED, and store the resulting expressions in DEST. */ @@ -1750,7 +1718,7 @@ pre_expr expr; int i; - if (!phi_nodes (phiblock)) + if (gimple_seq_empty_p (phi_nodes (phiblock))) { bitmap_set_copy (dest, set); return; @@ -2132,14 +2100,14 @@ goto maybe_dump_sets; } - if (phi_nodes (first)) + if (!gimple_seq_empty_p (phi_nodes (first))) phi_translate_set (ANTIC_OUT, ANTIC_IN (first), block, first); else bitmap_set_copy (ANTIC_OUT, ANTIC_IN (first)); for (i = 0; VEC_iterate (basic_block, worklist, i, bprime); i++) { - if (phi_nodes (bprime)) + if (!gimple_seq_empty_p (phi_nodes (bprime))) { bitmap_set_t tmp = bitmap_set_new (); phi_translate_set (tmp, ANTIC_IN (bprime), block, bprime); @@ -2289,7 +2257,7 @@ FOR_EACH_EXPR_ID_IN_SET (ANTIC_IN (bprime), i, bi) bitmap_value_insert_into_set (PA_OUT, expression_for_id (i)); - if (phi_nodes (bprime)) + if (!gimple_seq_empty_p (phi_nodes (bprime))) { bitmap_set_t pa_in = bitmap_set_new (); phi_translate_set (pa_in, PA_IN (bprime), block, bprime); @@ -4146,7 +4114,6 @@ expression_to_id = htab_create (num_ssa_names * 3, pre_expr_hash, pre_expr_eq, NULL); - seen_during_translate = BITMAP_ALLOC (&grand_bitmap_obstack); bitmap_set_pool = create_alloc_pool ("Bitmap sets", sizeof (struct bitmap_set), 30); pre_expr_pool = create_alloc_pool ("pre_expr nodes",