[LRA] PR70904, relax the restriction on subreg reload for wide mode

2016-05-12  Jiong Wang  <jiong.wang@arm.com>

gcc/
  PR rtl-optimization/70904
  * lra-constraint.c (process_addr_reg): Relax the restriction on
  subreg reload for wide mode.

From-SVN: r236181
This commit is contained in:
Jiong Wang 2016-05-12 17:00:52 +00:00 committed by Jiong Wang
parent 4f2e1536a3
commit ada2eb687f
2 changed files with 21 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2016-05-12 Jiong Wang <jiong.wang@arm.com>
PR rtl-optimization/70904
* lra-constraint.c (process_addr_reg): Relax the restriction on subreg
reload for wide mode.
2016-05-12 Marek Polacek <polacek@redhat.com>
PR c/70756

View file

@ -1307,7 +1307,21 @@ process_addr_reg (rtx *loc, bool check_only_p, rtx_insn **before, rtx_insn **aft
subreg_p = GET_CODE (*loc) == SUBREG;
if (subreg_p)
loc = &SUBREG_REG (*loc);
{
reg = SUBREG_REG (*loc);
mode = GET_MODE (reg);
/* For mode with size bigger than ptr_mode, there unlikely to be "mov"
between two registers with different classes, but there normally will
be "mov" which transfers element of vector register into the general
register, and this normally will be a subreg which should be reloaded
as a whole. This is particularly likely to be triggered when
-fno-split-wide-types specified. */
if (in_class_p (reg, cl, &new_class)
|| GET_MODE_SIZE (mode) <= GET_MODE_SIZE (ptr_mode))
loc = &SUBREG_REG (*loc);
}
reg = *loc;
mode = GET_MODE (reg);
if (! REG_P (reg))