lra: Clobbers in a parallel are earlyclobbers (PR83245)
authorSegher Boessenkool <segher@kernel.crashing.org>
Mon, 4 Dec 2017 09:30:37 +0000 (10:30 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Mon, 4 Dec 2017 09:30:37 +0000 (10:30 +0100)
commit80850da1e9e9866ff7792865bebea52114d0231c
treeb2fb5b95780d8b3443f180aa4ebd7bf4bdc96007
parent155f67eb98d082414be01425ca5eff3b9c3230fe
lra: Clobbers in a parallel are earlyclobbers (PR83245)

The documentation (rtl.texi) says:

  When a @code{clobber} expression for a register appears inside a
  @code{parallel} with other side effects, the register allocator
  guarantees that the register is unoccupied both before and after that
  insn if it is a hard register clobber.

and at least the rs6000 backend relies on that (see PR83245).  This
patch restores that behaviour.

Registers that are also used as operands in the instruction are not
treated as earlyclobber, so such insns also still work (PR80818, an
s390 testcase).

PR rtl-optimization/83245
* lra.c (collect_non_operand_hard_regs): Treat clobbers of non-operand
hard registers as earlyclobber, also if not in an asm.

From-SVN: r255377
gcc/ChangeLog
gcc/lra.c