From 58de89e74911baebdd1d0ce10cba6a8be8ff71ee Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 12 Apr 2000 13:10:42 +0000 Subject: [PATCH] * tree.c (unsave_expr_now_r, unsafe_for_reeval): Properly do TREE_LIST. From-SVN: r33104 --- gcc/ChangeLog | 2 ++ gcc/tree.c | 52 +++++++++++++++++++++++---------------------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9fd3047f8f..29743ba7f5e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ Wed Apr 12 08:47:38 2000 Richard Kenner + * tree.c (unsave_expr_now_r, unsafe_for_reeval): Properly do TREE_LIST. + * print-rtl.c (print_rtx): For CALL_PLACEHOLDER, output the CALL_INSN from the normal case. diff --git a/gcc/tree.c b/gcc/tree.c index 66078e5646a..24eca04e554 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -2649,27 +2649,22 @@ unsave_expr_now_r (expr) unsave_expr_1 (expr); code = TREE_CODE (expr); - if (code == CALL_EXPR - && TREE_OPERAND (expr, 1) - && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST) - { - tree exp = TREE_OPERAND (expr, 1); - while (exp) - { - unsave_expr_now_r (TREE_VALUE (exp)); - exp = TREE_CHAIN (exp); - } - } - switch (TREE_CODE_CLASS (code)) { case 'c': /* a constant */ case 't': /* a type node */ - case 'x': /* something random, like an identifier or an ERROR_MARK. */ case 'd': /* A decl node */ case 'b': /* A block node */ break; + case 'x': /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK. */ + if (code == TREE_LIST) + { + unsave_expr_now_r (TREE_VALUE (expr)); + unsave_expr_now_r (TREE_CHAIN (expr)); + } + break; + case 'e': /* an expression */ case 'r': /* a reference */ case 's': /* an expression with side effects */ @@ -2724,8 +2719,10 @@ int unsafe_for_reeval (expr) tree expr; { + int unsafeness = 0; enum tree_code code; - register int i, tmp, unsafeness; + int i, tmp; + tree exp; int first_rtl; if (expr == NULL_TREE) @@ -2733,7 +2730,6 @@ unsafe_for_reeval (expr) code = TREE_CODE (expr); first_rtl = first_rtl_op (code); - unsafeness = 0; switch (code) { @@ -2741,20 +2737,18 @@ unsafe_for_reeval (expr) case RTL_EXPR: return 2; - case CALL_EXPR: - if (TREE_OPERAND (expr, 1) - && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST) + case TREE_LIST: + for (exp = expr; exp != 0; exp = TREE_CHAIN (exp)) { - tree exp = TREE_OPERAND (expr, 1); - while (exp) - { - tmp = unsafe_for_reeval (TREE_VALUE (exp)); - if (tmp > 1) - return tmp; - exp = TREE_CHAIN (exp); - } + tmp = unsafe_for_reeval (TREE_VALUE (exp)); + unsafeness = MAX (tmp, unsafeness); } - return 1; + + return unsafeness; + + case CALL_EXPR: + tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1)); + return MAX (tmp, 1); case TARGET_EXPR: unsafeness = 1; @@ -2783,9 +2777,9 @@ unsafe_for_reeval (expr) for (i = first_rtl - 1; i >= 0; i--) { tmp = unsafe_for_reeval (TREE_OPERAND (expr, i)); - if (tmp > unsafeness) - unsafeness = tmp; + unsafeness = MAX (tmp, unsafeness); } + return unsafeness; default: -- 2.30.2