On Fri, Jan 15, 2016 at 06:24:42AM -0800, H.J. Lu wrote:
> >> -Ofast -mavx -mno-avx2 -mtune=bdver2
> >>
> >> float *a, *b;
> >> int c, d, e, f;
> >> void
> >> foo (void)
> >> {
> >>   for (; c; c++)
> >>     a[c] = 0;
> >>   if (!d)
> >>     for (; c < f; c++)
> >>       b[c] = (double) e / b[c];
> >> }
> >>
> >> r232086 vs. r232088 gives.  I don't see significant differences before IRA,
> >> IRA seems to have some cost differences (strange), but the same 
> >> dispositions,
> >> and LRA ends up with all the differences.
> >>
> >
> > That may be due to the difference between define_memory_constraint and
> > define_constraint.  LRA doesn't consider register for define_constraint if
> > memory is true.
> >
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68991#c14

Tracking this in PR69299.  Maybe we really need to have two types of memory
constraints, ones which can be worst case always satisfied by reloading
their address into an address register and another ones which can be worst
case always satisfied by loading the memory into a temporary register (for
loads) or storing it from a temporary register.

        Jakub

Reply via email to