On Tue, Aug 2, 2011 at 2:06 PM, Mikael Pettersson <mi...@it.uu.se> wrote:
> Michael Walle writes:
>  >
>  > Hi,
>  >
>  > > To confirm that try -fno-tree-ter.
>  >
>  > "lm32-gcc -O1 -fno-tree-ter -S -c test.c" generates the following working
>  > assembly code:
>  >
>  > f2:
>  >      addi     sp, sp, -4
>  >      sw       (sp+4), ra
>  >      addi     r2, r0, 10
>  >      calli    __ashrsi3
>  >      addi     r8, r0, 10
>  >      scall
>  >      lw       ra, (sp+4)
>  >      addi     sp, sp, 4
>  >      b        ra
>
> -fno-tree-ter also unbreaks the ARM test case in PR48863 comment #4.

It's of course only a workaround, not a real fix as nothing prevents
other optimizers from performing the re-scheduling TER does.

I suggest to amend the documentation for local call-clobbered register
variables to say that the only valid sequence using them is from a
non-inlinable function that contains only direct initializations of the
register variables from constants or parameters.

Or go one step further and deprecate local register variables alltogether
(they IMHO don't make much sense, and rather the targets should provide
a way to properly constrain asm inputs and outputs).

Richard.

Reply via email to