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