Tweak LRA handling of shared spill slots

Jeff Law law@redhat.com
Wed Nov 23 23:01:00 GMT 2016


On 11/15/2016 09:14 AM, Richard Sandiford wrote:
> The previous code processed the users of a stack slot in order of
> decreasing size and allocated the slot based on the first user.
> This seems a bit dangerous, since the ordering is based on the
> mode of the biggest reference while the allocation is based also
> on the size of the register itself (which I think could be larger).
>
> That scheme doesn't scale well to polynomial sizes, since there's
> no guarantee that the order of the sizes is known at compile time.
> This patch instead records an upper bound on the size required
> by all users of a slot.  It also records the maximum alignment
> requirement.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?
>
> Thanks,
> Richard
>
>
> [ This patch is part of the SVE series posted here:
>   https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]
>
> gcc/
> 2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
> 	    Alan Hayward  <alan.hayward@arm.com>
> 	    David Sherwood  <david.sherwood@arm.com>
>
> 	* function.h (spill_slot_alignment): Declare.
> 	* function.c (spill_slot_alignment): New function.
> 	* lra-spills.c (slot): Add align and size fields.
> 	(assign_mem_slot): Use them in the call to assign_stack_local.
> 	(add_pseudo_to_slot): Update the fields.
> 	(assign_stack_slot_num_and_sort_pseudos): Initialise the fields.
OK.  I like that we can avoid the BYTES_BIG_ENDIAN un-correction by 
allocating a BLKmode slot.  Thankfully that code was something I was 
already familiar with by way of an H8 bugfix eons ago.

Jeff



More information about the Gcc-patches mailing list