Allow earlyclobbers in ira_get_dup_out_num
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 1 Jul 2019 08:58:35 +0000 (08:58 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 1 Jul 2019 08:58:35 +0000 (08:58 +0000)
commitae5569fa33c9f3286e0b747f8b6607d21a4b9827
treee304d56814b85dc09725acc219dd030b3af23839
parented680e2cc18c73f90e6bfbd3f346a8820476371b
Allow earlyclobbers in ira_get_dup_out_num

ira_get_dup_out_num punted on operands that are matched to
earlyclobber outputs:

    /* It is better ignore an alternative with early clobber.  */
    else if (*str == '&')
      goto fail;

But I'm not sure why this is the right thing to do.  At this stage
we've established that *all* alternatives of interest require the
input to match the output, so

(a) the earlyclobber can only affect other operands and
(b) not tying the registers is bound to introduce a move

The code was part of the initial commit and so isn't obviously
related to a specific testcase.  Also, I can imagine LRA makes
a much better job of this situation than reload did.  (Certainly
SVE uses matched earlyclobbers extensively and I haven't seen any
problems.)

In case this turns out to regress something important: the main
case that matters for SVE is the one in which all alternatives
are earlyclobber.

2019-07-01  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* ira.c (ira_get_dup_out_num): Don't punt for earlyclobbers.
Use recog_data to test for an output operand.

From-SVN: r272850
gcc/ChangeLog
gcc/ira.c