Commit 9afb455c by Vladimir Makarov Committed by Vladimir Makarov

lra-assign.c (assign_by_spills): Add code to assign vector regs to inheritance pseudos.

2014-06-13  Vladimir Makarov  <vmakarov@redhat.com>

	* lra-assign.c (assign_by_spills): Add code to assign vector regs
	to inheritance pseudos.
	* config/i386/i386.c (ix86_spill_class): Add check on NO_REGS.

From-SVN: r211655
parent 8241efd1
2014-06-13 Vladimir Makarov <vmakarov@redhat.com>
* lra-assign.c (assign_by_spills): Add code to assign vector regs
to inheritance pseudos.
* config/i386/i386.c (ix86_spill_class): Add check on NO_REGS.
2014-06-13 Peter Bergner <bergner@vnet.ibm.com> 2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
PR target/61415 PR target/61415
......
...@@ -46502,7 +46502,7 @@ ix86_spill_class (reg_class_t rclass, enum machine_mode mode) ...@@ -46502,7 +46502,7 @@ ix86_spill_class (reg_class_t rclass, enum machine_mode mode)
{ {
if (TARGET_SSE && TARGET_GENERAL_REGS_SSE_SPILL && ! TARGET_MMX if (TARGET_SSE && TARGET_GENERAL_REGS_SSE_SPILL && ! TARGET_MMX
&& (mode == SImode || (TARGET_64BIT && mode == DImode)) && (mode == SImode || (TARGET_64BIT && mode == DImode))
&& INTEGER_CLASS_P (rclass)) && rclass != NO_REGS && INTEGER_CLASS_P (rclass))
return ALL_SSE_REGS; return ALL_SSE_REGS;
return NO_REGS; return NO_REGS;
} }
...@@ -1420,6 +1420,31 @@ assign_by_spills (void) ...@@ -1420,6 +1420,31 @@ assign_by_spills (void)
alternatives of insns containing the pseudo. */ alternatives of insns containing the pseudo. */
bitmap_set_bit (&changed_pseudo_bitmap, regno); bitmap_set_bit (&changed_pseudo_bitmap, regno);
} }
else
{
enum reg_class rclass = lra_get_allocno_class (regno);
enum reg_class spill_class;
if (lra_reg_info[regno].restore_regno < 0
|| ! bitmap_bit_p (&lra_inheritance_pseudos, regno)
|| (spill_class
= ((enum reg_class)
targetm.spill_class
((reg_class_t) rclass,
PSEUDO_REGNO_MODE (regno)))) == NO_REGS)
continue;
regno_allocno_class_array[regno] = spill_class;
hard_regno = find_hard_regno_for (regno, &cost, -1, false);
if (hard_regno < 0)
regno_allocno_class_array[regno] = rclass;
else
{
setup_reg_classes
(regno, spill_class, spill_class, spill_class);
assign_hard_regno (hard_regno, regno);
bitmap_set_bit (&changed_pseudo_bitmap, regno);
}
}
} }
} }
free (update_hard_regno_preference_check); free (update_hard_regno_preference_check);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment