* tree.c (unsave_expr_now_r, unsafe_for_reeval): Properly do TREE_LIST.
From-SVN: r33104
This commit is contained in:
parent
c3c6393606
commit
58de89e749
|
@ -1,5 +1,7 @@
|
||||||
Wed Apr 12 08:47:38 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
Wed Apr 12 08:47:38 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||||
|
|
||||||
|
* tree.c (unsave_expr_now_r, unsafe_for_reeval): Properly do TREE_LIST.
|
||||||
|
|
||||||
* print-rtl.c (print_rtx): For CALL_PLACEHOLDER, output the
|
* print-rtl.c (print_rtx): For CALL_PLACEHOLDER, output the
|
||||||
CALL_INSN from the normal case.
|
CALL_INSN from the normal case.
|
||||||
|
|
||||||
|
|
50
gcc/tree.c
50
gcc/tree.c
|
@ -2649,27 +2649,22 @@ unsave_expr_now_r (expr)
|
||||||
unsave_expr_1 (expr);
|
unsave_expr_1 (expr);
|
||||||
|
|
||||||
code = TREE_CODE (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))
|
switch (TREE_CODE_CLASS (code))
|
||||||
{
|
{
|
||||||
case 'c': /* a constant */
|
case 'c': /* a constant */
|
||||||
case 't': /* a type node */
|
case 't': /* a type node */
|
||||||
case 'x': /* something random, like an identifier or an ERROR_MARK. */
|
|
||||||
case 'd': /* A decl node */
|
case 'd': /* A decl node */
|
||||||
case 'b': /* A block node */
|
case 'b': /* A block node */
|
||||||
break;
|
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 'e': /* an expression */
|
||||||
case 'r': /* a reference */
|
case 'r': /* a reference */
|
||||||
case 's': /* an expression with side effects */
|
case 's': /* an expression with side effects */
|
||||||
|
@ -2724,8 +2719,10 @@ int
|
||||||
unsafe_for_reeval (expr)
|
unsafe_for_reeval (expr)
|
||||||
tree expr;
|
tree expr;
|
||||||
{
|
{
|
||||||
|
int unsafeness = 0;
|
||||||
enum tree_code code;
|
enum tree_code code;
|
||||||
register int i, tmp, unsafeness;
|
int i, tmp;
|
||||||
|
tree exp;
|
||||||
int first_rtl;
|
int first_rtl;
|
||||||
|
|
||||||
if (expr == NULL_TREE)
|
if (expr == NULL_TREE)
|
||||||
|
@ -2733,7 +2730,6 @@ unsafe_for_reeval (expr)
|
||||||
|
|
||||||
code = TREE_CODE (expr);
|
code = TREE_CODE (expr);
|
||||||
first_rtl = first_rtl_op (code);
|
first_rtl = first_rtl_op (code);
|
||||||
unsafeness = 0;
|
|
||||||
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
|
@ -2741,20 +2737,18 @@ unsafe_for_reeval (expr)
|
||||||
case RTL_EXPR:
|
case RTL_EXPR:
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
case CALL_EXPR:
|
case TREE_LIST:
|
||||||
if (TREE_OPERAND (expr, 1)
|
for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
|
||||||
&& TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
|
|
||||||
{
|
|
||||||
tree exp = TREE_OPERAND (expr, 1);
|
|
||||||
while (exp)
|
|
||||||
{
|
{
|
||||||
tmp = unsafe_for_reeval (TREE_VALUE (exp));
|
tmp = unsafe_for_reeval (TREE_VALUE (exp));
|
||||||
if (tmp > 1)
|
unsafeness = MAX (tmp, unsafeness);
|
||||||
return tmp;
|
|
||||||
exp = TREE_CHAIN (exp);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 1;
|
return unsafeness;
|
||||||
|
|
||||||
|
case CALL_EXPR:
|
||||||
|
tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
|
||||||
|
return MAX (tmp, 1);
|
||||||
|
|
||||||
case TARGET_EXPR:
|
case TARGET_EXPR:
|
||||||
unsafeness = 1;
|
unsafeness = 1;
|
||||||
|
@ -2783,9 +2777,9 @@ unsafe_for_reeval (expr)
|
||||||
for (i = first_rtl - 1; i >= 0; i--)
|
for (i = first_rtl - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
|
tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
|
||||||
if (tmp > unsafeness)
|
unsafeness = MAX (tmp, unsafeness);
|
||||||
unsafeness = tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return unsafeness;
|
return unsafeness;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue