diff options
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 92932b63def..3d505b5579b 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1137,12 +1137,13 @@ compute_antic_aux (basic_block block) setting the BB_VISITED flag. */ if (! (block->flags & BB_VISITED)) { - for (e = block->pred; e; e = e->pred_next) - if (e->flags & EDGE_ABNORMAL) - { - block->flags |= BB_VISITED; - break; - } + edge_iterator ei; + FOR_EACH_EDGE (e, ei, block->preds) + if (e->flags & EDGE_ABNORMAL) + { + block->flags |= BB_VISITED; + break; + } } if (block->flags & BB_VISITED) { @@ -1157,14 +1158,14 @@ compute_antic_aux (basic_block block) /* If the block has no successors, ANTIC_OUT is empty, because it is the exit block. */ - if (block->succ == NULL); + if (EDGE_COUNT (block->succs) == 0); /* If we have one successor, we could have some phi nodes to translate through. */ - else if (block->succ->succ_next == NULL) + else if (EDGE_COUNT (block->succs) == 1) { - phi_translate_set (ANTIC_OUT, ANTIC_IN(block->succ->dest), - block, block->succ->dest); + phi_translate_set (ANTIC_OUT, ANTIC_IN(EDGE_SUCC (block, 0)->dest), + block, EDGE_SUCC (block, 0)->dest); } /* If we have multiple successors, we take the intersection of all of them. */ @@ -1174,14 +1175,11 @@ compute_antic_aux (basic_block block) edge e; size_t i; basic_block bprime, first; + edge_iterator ei; worklist = VEC_alloc (basic_block, 2); - e = block->succ; - while (e) - { - VEC_safe_push (basic_block, worklist, e->dest); - e = e->succ_next; - } + FOR_EACH_EDGE (e, ei, block->succs) + VEC_safe_push (basic_block, worklist, e->dest); first = VEC_index (basic_block, worklist, 0); set_copy (ANTIC_OUT, ANTIC_IN (first)); @@ -1426,7 +1424,7 @@ insert_aux (basic_block block) bitmap_insert_into_set (NEW_SETS (block), ssa_name (i)); bitmap_value_replace_in_set (AVAIL_OUT (block), ssa_name (i)); } - if (block->pred->pred_next) + if (EDGE_COUNT (block->preds) > 1) { value_set_node_t node; for (node = ANTIC_IN (block)->head; @@ -1445,6 +1443,7 @@ insert_aux (basic_block block) edge pred; basic_block bprime; tree eprime; + edge_iterator ei; val = get_value_handle (node->expr); if (bitmap_set_contains_value (PHI_GEN (block), val)) @@ -1455,11 +1454,9 @@ insert_aux (basic_block block) fprintf (dump_file, "Found fully redundant value\n"); continue; } - + avail = xcalloc (last_basic_block, sizeof (tree)); - for (pred = block->pred; - pred; - pred = pred->pred_next) + FOR_EACH_EDGE (pred, ei, block->preds) { tree vprime; tree edoubleprime; @@ -1520,7 +1517,7 @@ insert_aux (basic_block block) partially redundant. */ if (!cant_insert && !all_same && by_some) { - tree type = TREE_TYPE (avail[block->pred->src->index]); + tree type = TREE_TYPE (avail[EDGE_PRED (block, 0)->src->index]); tree temp; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -1530,9 +1527,7 @@ insert_aux (basic_block block) } /* Make the necessary insertions. */ - for (pred = block->pred; - pred; - pred = pred->pred_next) + FOR_EACH_EDGE (pred, ei, block->preds) { tree stmts = alloc_stmt_list (); tree builtexpr; @@ -1547,7 +1542,7 @@ insert_aux (basic_block block) bsi_insert_on_edge (pred, stmts); avail[bprime->index] = builtexpr; } - } + } /* Now build a phi for the new variable. */ temp = create_tmp_var (type, "prephitmp"); add_referenced_tmp_var (temp); @@ -1562,9 +1557,7 @@ insert_aux (basic_block block) #endif bitmap_value_replace_in_set (AVAIL_OUT (block), PHI_RESULT (temp)); - for (pred = block->pred; - pred; - pred = pred->pred_next) + FOR_EACH_EDGE (pred, ei, block->preds) { add_phi_arg (&temp, avail[pred->src->index], pred); @@ -1631,8 +1624,7 @@ is_undefined_value (tree expr) return (TREE_CODE (expr) == SSA_NAME && IS_EMPTY_STMT (SSA_NAME_DEF_STMT (expr)) /* PARM_DECLs and hard registers are always defined. */ - && TREE_CODE (SSA_NAME_VAR (expr)) != PARM_DECL - && !DECL_HARD_REGISTER (SSA_NAME_VAR (expr))); + && TREE_CODE (SSA_NAME_VAR (expr)) != PARM_DECL); } @@ -1926,9 +1918,9 @@ init_pre (void) ENTRY_BLOCK_PTR (FIXME, if ENTRY_BLOCK_PTR had an index number different than -1 we wouldn't have to hack this. tree-ssa-dce.c needs a similar change). */ - if (ENTRY_BLOCK_PTR->succ->dest->pred->pred_next) - if (!(ENTRY_BLOCK_PTR->succ->flags & EDGE_ABNORMAL)) - split_edge (ENTRY_BLOCK_PTR->succ); + if (EDGE_COUNT (EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest->preds) > 1) + if (!(EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->flags & EDGE_ABNORMAL)) + split_edge (EDGE_SUCC (ENTRY_BLOCK_PTR, 0)); FOR_ALL_BB (bb) bb->aux = xcalloc (1, sizeof (struct bb_value_sets)); |