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 rguent...@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"