[Bug tree-optimization/80155] [7 regression] Performance regression with code hoisting enabled
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Fri Apr 7 12:57:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80155
--- Comment #25 from rguenther at suse dot de <rguenther at suse dot de> ---
On Fri, 7 Apr 2017, thopre01 at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80155
>
> --- Comment #24 from Thomas Preud'homme <thopre01 at gcc dot gnu.org> ---
> (In reply to rguenther@suse.de from comment #23)
> > On Fri, 7 Apr 2017, thopre01 at gcc dot gnu.org wrote:
> >
> > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80155
> > >
> > > --- Comment #22 from Thomas Preud'homme <thopre01 at gcc dot gnu.org> ---
> > > (In reply to Thomas Preud'homme from comment #21)
> > > >
> > > > I can see this behavior for Cortex-M0+ indeed but the results are different
> > > > for Cortex-M7 for me:
> > > >
> > > > <with code hoisting>
> > > > % arm-none-linux-gnueabi-gcc -S ~/cortex-m0plus_reproducer.c -O2
> > > > -mcpu=cortex-m7 -mthumb -fdump-tree-pre-details -fdump-tree-crited
> > > > -fdump-tree-all -funroll-all-loops
> > > >
> > > > % grep push cortex-m0plus_reproducer.s
> > > > push {r4, r5}
> > > >
> > > >
> > > > <without code hoisting>
> > > > % arm-none-linux-gnueabi-gcc -S ~/cortex-m0plus_reproducer.c -O2
> > > > -mcpu=cortex-m7 -mthumb -fdump-tree-pre-details -fdump-tree-crited
> > > > -fdump-tree-all -funroll-all-loops -fno-code-hoisting
> > > >
> > > > % grep push cortex-m0plus_reproducer.s
> > > > push {r4}
> > > >
> > > > Would you mind checking again?
> > >
> > > btw, this toolchain was built on 2017-04-04 in case that's the issue.
> >
> > Ok, I can reproduce it now. With the proposed patch to fix the other
> > case it regresses with -fno-code-hoisting though (comment #9 plus fix).
> >
> > Note that code-hosting is simply doing it's job here, hoisting common
> > code out of a switch.
>
> I understand that. Code is smaller so it's definitely worthwhile at -Os. But it
> sometimes lead to worse performance due to more spilling.
But there's no good way to estimate that. We have tons of transforms
that have the issue of being "sometimes worse"
More information about the Gcc-bugs
mailing list