re PR rtl-optimization/59915 (LRA ICE - Repeated looping over subreg reloads (gcc.c-torture/compile/simd-3.c))
2014-01-23 Vladimir Makarov <vmakarov@redhat.com> PR regression/59915 * lra-constraints.c (simplify_operand_subreg): Spill pseudo if there is a danger of looping. From-SVN: r207007
This commit is contained in:
parent
f04dda3093
commit
6e23f29678
2 changed files with 20 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-01-23 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR regression/59915
|
||||
* lra-constraints.c (simplify_operand_subreg): Spill pseudo if
|
||||
there is a danger of looping.
|
||||
|
||||
2014-01-23 Pat Haugen <pthaugen@us.ibm.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
|
||||
|
|
|
@ -1291,9 +1291,20 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
|
|||
&& ! LRA_SUBREG_P (operand))
|
||||
|| CONSTANT_P (reg) || GET_CODE (reg) == PLUS || MEM_P (reg))
|
||||
{
|
||||
/* The class will be defined later in curr_insn_transform. */
|
||||
enum reg_class rclass
|
||||
= (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
|
||||
enum reg_class rclass;
|
||||
|
||||
if (REG_P (reg)
|
||||
&& curr_insn_set != NULL_RTX
|
||||
&& (REG_P (SET_SRC (curr_insn_set))
|
||||
|| GET_CODE (SET_SRC (curr_insn_set)) == SUBREG))
|
||||
/* There is big probability that we will get the same class
|
||||
for the new pseudo and we will get the same insn which
|
||||
means infinite looping. So spill the new pseudo. */
|
||||
rclass = NO_REGS;
|
||||
else
|
||||
/* The class will be defined later in curr_insn_transform. */
|
||||
rclass
|
||||
= (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
|
||||
|
||||
if (get_reload_reg (curr_static_id->operand[nop].type, reg_mode, reg,
|
||||
rclass, "subreg reg", &new_reg))
|
||||
|
|
Loading…
Add table
Reference in a new issue