Commit 89752202 by Herman A.J. ten Brugge Committed by Jeff Law

expr.c (expand_assignment): Rework address calculation for structure field…

expr.c (expand_assignment): Rework address calculation for structure field members to expose more invariant...

        * expr.c (expand_assignment): Rework address calculation for structure
        field members to expose more invariant computations to the loop
        optimizer.
        (expand_expr): Likewise.

From-SVN: r20705
parent c358412f
1998-06-22 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* expr.c (expand_assignment): Rework address calculation for structure
field members to expose more invariant computations to the loop
optimizer.
(expand_expr): Likewise.
Wed Jun 24 22:44:22 1998 Jeffrey A Law (law@cygnus.com)
* local-alloc.c (block_alloc): Do not try to avoid false dependencies
......
......@@ -2920,6 +2920,26 @@ expand_assignment (to, from, want_value, suggest_reg)
#endif
}
if (GET_CODE (to_rtx) == MEM
&& GET_MODE (to_rtx) == BLKmode
&& bitsize
&& (bitpos % bitsize) == 0
&& (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0
&& (alignment * BITS_PER_UNIT) == GET_MODE_ALIGNMENT (mode1))
{
rtx temp = change_address (to_rtx, mode1,
plus_constant (XEXP (to_rtx, 0),
(bitpos /
BITS_PER_UNIT)));
if (GET_CODE (XEXP (temp, 0)) == REG)
to_rtx = temp;
else
to_rtx = change_address (to_rtx, mode1,
force_reg (GET_MODE (XEXP (temp, 0)),
XEXP (temp, 0)));
bitpos = 0;
}
to_rtx = change_address (to_rtx, VOIDmode,
gen_rtx_PLUS (ptr_mode, XEXP (to_rtx, 0),
force_reg (ptr_mode, offset_rtx)));
......@@ -5918,6 +5938,27 @@ expand_expr (exp, target, tmode, modifier)
#endif
}
if (GET_CODE (op0) == MEM
&& GET_MODE (op0) == BLKmode
&& bitsize
&& (bitpos % bitsize) == 0
&& (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0
&& (alignment * BITS_PER_UNIT) == GET_MODE_ALIGNMENT (mode1))
{
rtx temp = change_address (op0, mode1,
plus_constant (XEXP (op0, 0),
(bitpos /
BITS_PER_UNIT)));
if (GET_CODE (XEXP (temp, 0)) == REG)
op0 = temp;
else
op0 = change_address (op0, mode1,
force_reg (GET_MODE (XEXP (temp, 0)),
XEXP (temp, 0)));
bitpos = 0;
}
op0 = change_address (op0, VOIDmode,
gen_rtx_PLUS (ptr_mode, XEXP (op0, 0),
force_reg (ptr_mode, offset_rtx)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment