diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2007-05-01 12:17:43 +0200 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2007-05-01 10:17:43 +0000 |
commit | 8b11009bad1b794283984fc806198e3cf29dbed3 (patch) | |
tree | af410434537ec713cf3e23d857c1ce808af279bf /gcc/tree-ssa-loop-ivopts.c | |
parent | f5052e291a2fdb6eb5c9a968b9a1a68a12aa5866 (diff) | |
download | gcc-8b11009bad1b794283984fc806198e3cf29dbed3.zip gcc-8b11009bad1b794283984fc806198e3cf29dbed3.tar.gz gcc-8b11009bad1b794283984fc806198e3cf29dbed3.tar.bz2 |
tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Use bsi_after_labels.
* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Use
bsi_after_labels. Always insert statements before bsi.
* tree-vect-transform.c (vect_create_epilog_for_reduction): Ditto.
* predict.c (apply_return_prediction): Check for empty blocks.
* cfgexpand.c (lab_rtx_for_bb): New variable.
(label_rtx_for_bb): Do not create new tree labels.
(expand_gimple_basic_block): Add labels recorded in lab_rtx_for_bb.
(tree_expand_cfg): Initialize lab_rtx_for_bb.
* tree-cfg.c (build_tree_cfg): Call cleanup_dead_labels after
creating edges.
(label_for_bb): Add field used.
(update_eh_label, main_block_label): Mark the label used.
(cleanup_dead_labels): Remove unused labels.
From-SVN: r124322
Diffstat (limited to 'gcc/tree-ssa-loop-ivopts.c')
-rw-r--r-- | gcc/tree-ssa-loop-ivopts.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index d26608b..1e5c503 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -4866,7 +4866,7 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data, { tree comp; tree op, stmts, tgt, ass; - block_stmt_iterator bsi, pbsi; + block_stmt_iterator bsi; /* An important special case -- if we are asked to express value of the original iv by itself, just exit; there is no need to @@ -4937,13 +4937,7 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data, if (name_info (data, tgt)->preserve_biv) return; - pbsi = bsi = bsi_start (bb_for_stmt (use->stmt)); - while (!bsi_end_p (pbsi) - && TREE_CODE (bsi_stmt (pbsi)) == LABEL_EXPR) - { - bsi = pbsi; - bsi_next (&pbsi); - } + bsi = bsi_after_labels (bb_for_stmt (use->stmt)); break; case GIMPLE_MODIFY_STMT: @@ -4956,22 +4950,18 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data, } op = force_gimple_operand (comp, &stmts, false, SSA_NAME_VAR (tgt)); + if (stmts) + bsi_insert_before (&bsi, stmts, BSI_SAME_STMT); if (TREE_CODE (use->stmt) == PHI_NODE) { - if (stmts) - bsi_insert_after (&bsi, stmts, BSI_CONTINUE_LINKING); ass = build_gimple_modify_stmt (tgt, op); - bsi_insert_after (&bsi, ass, BSI_NEW_STMT); + bsi_insert_before (&bsi, ass, BSI_SAME_STMT); remove_statement (use->stmt, false); SSA_NAME_DEF_STMT (tgt) = ass; } else - { - if (stmts) - bsi_insert_before (&bsi, stmts, BSI_SAME_STMT); - GIMPLE_STMT_OPERAND (use->stmt, 1) = op; - } + GIMPLE_STMT_OPERAND (use->stmt, 1) = op; } /* Replaces ssa name in index IDX by its basic variable. Callback for |