aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/function.c30
2 files changed, 17 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f6baaab..08224fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2001-04-27 Zack Weinberg <zackw@stanford.edu>
+
+ * function.c (purge_addressof_1): Remove the duplicate
+ if (code == SET) block. Fold the two if (code == ADDRESSOF)
+ blocks together.
+
2001-04-28 Jason Merrill <jason_merrill@redhat.com>
* except.c (expand_eh_region_start): Don't start a new block.
diff --git a/gcc/function.c b/gcc/function.c
index 482e3ef..c272704 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2991,14 +2991,19 @@ purge_addressof_1 (loc, insn, force, store, ht)
result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht);
return result;
}
-
- else if (code == ADDRESSOF && GET_CODE (XEXP (x, 0)) == MEM)
+ else if (code == ADDRESSOF)
{
+ rtx sub, insns;
+
+ if (GET_CODE (XEXP (x, 0)) != MEM)
+ {
+ put_addressof_into_stack (x, ht);
+ return true;
+ }
+
/* We must create a copy of the rtx because it was created by
overwriting a REG rtx which is always shared. */
- rtx sub = copy_rtx (XEXP (XEXP (x, 0), 0));
- rtx insns;
-
+ sub = copy_rtx (XEXP (XEXP (x, 0), 0));
if (validate_change (insn, loc, sub, 0)
|| validate_replace_rtx (x, sub, insn))
return true;
@@ -3210,22 +3215,9 @@ purge_addressof_1 (loc, insn, force, store, ht)
}
goto restart;
}
- give_up:;
- /* else give up and put it into the stack */
- }
-
- else if (code == ADDRESSOF)
- {
- put_addressof_into_stack (x, ht);
- return true;
- }
- else if (code == SET)
- {
- result = purge_addressof_1 (&SET_DEST (x), insn, force, 1, ht);
- result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht);
- return result;
}
+ give_up:
/* Scan all subexpressions. */
fmt = GET_RTX_FORMAT (code);
for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)