expr.c (expand_expr): Use GOTO_SUBROUTINE_EXPR form when not optimizing.

* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR
        form when not optimizing.

From-SVN: r55723
This commit is contained in:
Richard Henderson 2002-07-24 15:05:19 -07:00 committed by Richard Henderson
parent dc44a4d856
commit 8ad8135aa4
2 changed files with 12 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2002-07-24 Richard Henderson <rth@redhat.com>
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR
form when not optimizing.
2002-07-24 David Mosberger <davidm@hpl.hp.com>
* config/ia64/ia64.c (gen_thread_pointer): Fix typo in marking

View File

@ -8966,12 +8966,18 @@ expand_expr (exp, target, tmode, modifier)
tree try_block = TREE_OPERAND (exp, 0);
tree finally_block = TREE_OPERAND (exp, 1);
if (unsafe_for_reeval (finally_block) > 1)
if (!optimize || unsafe_for_reeval (finally_block) > 1)
{
/* In this case, wrapping FINALLY_BLOCK in an UNSAVE_EXPR
is not sufficient, so we cannot expand the block twice.
So we play games with GOTO_SUBROUTINE_EXPR to let us
expand the thing only once. */
/* When not optimizing, we go ahead with this form since
(1) user breakpoints operate more predictably without
code duplication, and
(2) we're not running any of the global optimizers
that would explode in time/space with the highly
connected CFG created by the indirect branching. */
rtx finally_label = gen_label_rtx ();
rtx done_label = gen_label_rtx ();