aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Stump <mrs@gcc.gnu.org>1997-06-12 19:23:12 +0000
committerMike Stump <mrs@gcc.gnu.org>1997-06-12 19:23:12 +0000
commitb96257b6df86d010bb9b2487c09364699b0bbcea (patch)
tree0516ac989f6b21d40215438522c2a925909a8ca7
parentf5546425e91646b6997ed7ceb397f84db9b26271 (diff)
downloadgcc-b96257b6df86d010bb9b2487c09364699b0bbcea.zip
gcc-b96257b6df86d010bb9b2487c09364699b0bbcea.tar.gz
gcc-b96257b6df86d010bb9b2487c09364699b0bbcea.tar.bz2
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
-rw-r--r--gcc/tree.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 5198d2c..4bdfa00 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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;