This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR46556 (poor address generation)
On Wed, 2011-10-05 at 21:01 +0200, Paolo Bonzini wrote:
> On 10/05/2011 07:22 PM, William J. Schmidt wrote:
> > I don't know off the top of my head -- I'll have to gather that
> > information. The issue is that the profitability is really
> > context-sensitive, so just the isolated costs of insns aren't enough.
> > The forward propagation of the add into (mem (reg REG)) looks like a
> > slam dunk in the absence of other information, but if there are other
> > nearby references using nonzero offsets from REG, this just extends the
> > lifetimes of X and Y without eliminating the need for REG.
>
> True, however there are other passes that do this kind of un-CSE and
> lifetime reduction.
>
> Paolo
OK, I see. If there's a better place downstream to make a swizzle, I'm
certainly fine with that.
I disabled locally_poor_mem_replacement and added some dump information
in should_replace_address to show the costs for the replacement I'm
trying to avoid:
In should_replace_address:
old_rtx = (reg/f:DI 125 [ D.2036 ])
new_rtx = (plus:DI (reg/v/f:DI 126 [ p ])
(reg:DI 128))
address_cost (old_rtx) = 0
address_cost (new_rtx) = 0
set_src_cost (old_rtx) = 0
set_src_cost (new_rtx) = 4
In insn 11, replacing
(mem/s:SI (reg/f:DI 125 [ D.2036 ]) [2 p_1(D)->a S4 A32])
with (mem/s:SI (plus:DI (reg/v/f:DI 126 [ p ])
(reg:DI 128)) [2 p_1(D)->a S4 A32])
Changed insn 11
deferring rescan insn with uid = 11.
deferring rescan insn with uid = 11.
Hope this helps,
Bill