aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>2003-04-30 12:03:35 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2003-04-30 10:03:35 +0000
commitb2a7fa89ee52438c78715ca70f236a5f348b35f2 (patch)
tree8e055342cff5918d803db63ed5ca604cbb4ba7eb /gcc/function.c
parentad03daf005bc47def67da627decbbdfc037e9522 (diff)
downloadgcc-b2a7fa89ee52438c78715ca70f236a5f348b35f2.zip
gcc-b2a7fa89ee52438c78715ca70f236a5f348b35f2.tar.gz
gcc-b2a7fa89ee52438c78715ca70f236a5f348b35f2.tar.bz2
* function.c (purge_addressof_1): Postpone insn in fewer cases.
From-SVN: r66286
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/function.c b/gcc/function.c
index c5c0d03..6e52d7e 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3075,13 +3075,6 @@ purge_addressof_1 (loc, insn, force, store, may_postpone, ht)
{
rtx sub = XEXP (XEXP (x, 0), 0);
- if (may_postpone)
- {
- if (!postponed_insns || XEXP (postponed_insns, 0) != insn)
- postponed_insns = alloc_INSN_LIST (insn, postponed_insns);
- return true;
- }
-
if (GET_CODE (sub) == MEM)
sub = adjust_address_nv (sub, GET_MODE (x), 0);
else if (GET_CODE (sub) == REG
@@ -3091,6 +3084,15 @@ purge_addressof_1 (loc, insn, force, store, may_postpone, ht)
{
int size_x, size_sub;
+ if (may_postpone)
+ {
+ /* Postpone for now, so that we do not emit bitfield arithmetics
+ unless there is some benefit from it. */
+ if (!postponed_insns || XEXP (postponed_insns, 0) != insn)
+ postponed_insns = alloc_INSN_LIST (insn, postponed_insns);
+ return true;
+ }
+
if (!insn)
{
/* When processing REG_NOTES look at the list of