tree.c (unsave_expr_now): Avoid recursing into the parts of the tree that are RTL.

* tree.c (unsave_expr_now): Avoid recursing into the parts of
 	the tree that are RTL.

From-SVN: r14230
This commit is contained in:
Mike Stump 1997-06-12 19:23:12 +00:00
parent f5546425e9
commit b96257b6df
1 changed files with 15 additions and 1 deletions

View File

@ -2316,15 +2316,18 @@ unsave_expr_now (expr)
{
enum tree_code code;
register int i;
int first_rtl;
if (expr == NULL_TREE)
return expr;
code = TREE_CODE (expr);
first_rtl = tree_code_length [(int) code];
switch (code)
{
case SAVE_EXPR:
SAVE_EXPR_RTL (expr) = 0;
first_rtl = 2;
break;
case TARGET_EXPR:
@ -2336,6 +2339,7 @@ unsave_expr_now (expr)
/* I don't yet know how to emit a sequence multiple times. */
if (RTL_EXPR_SEQUENCE (expr) != 0)
abort ();
first_rtl = 0;
break;
case CALL_EXPR:
@ -2350,6 +2354,16 @@ unsave_expr_now (expr)
exp = TREE_CHAIN (exp);
}
}
first_rtl = 2;
break;
case WITH_CLEANUP_EXPR:
/* Should be defined to be 2. */
first_rtl = 1;
break;
case METHOD_CALL_EXPR:
first_rtl = 3;
break;
}
@ -2368,7 +2382,7 @@ unsave_expr_now (expr)
case '<': /* a comparison expression */
case '2': /* a binary arithmetic expression */
case '1': /* a unary arithmetic expression */
for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
for (i = first_rtl - 1; i >= 0; i--)
unsave_expr_now (TREE_OPERAND (expr, i));
return expr;