On 17/02/11 10:01, Chung-Lin Tang wrote:
Hi,
this PR is a case where we have a leaf function with a zero-size frame,
that calls alloca() (here through a C99 VLA).

The ARM backend recognizes the leaf-and-no-frame opportunity to save an
unneeded stack alignment. But when calling alloca(), the allocated block
is of BIGGEST_ALIGNMENT, which is 8-bytes under current AAPCS. Thus a
stack align may still be needed to place the alloca() returned block
properly.

This patch adjusts the early return condition with !cfun->calls_alloca.
Tested without regressions on ARM-Linux, okay for trunk?

OK.


Also related, the BIGGEST_ALIGNMENT defined for ARM is currently
ABI-based; 64-bits for AAPCS targets, and 32 for old ABI.  Should this
also consider arch-level as well? i.e. anything>= ARMv5TE (with ldrd)
should have this set to 64.

I don't think it's that straightforward. The ABI specifies that an 8 byte quantity must be aligned at 64 bit boundaries and this should be independent of architecture revisions. Think about pointers to 64 bit quantities passed from !(TARGET_LDRD) to TARGET_LDRD code or indeed creating structure layout issues between architecture revisions if you change this.

cheers
Ramana


2011-02-17  Chung-Lin Tang<clt...@codesourcery.com>

        PR target/43872
        * config/arm/arm.c (arm_get_frame_offsets): Adjust early
        return condition with !cfun->calls_alloca.

Reply via email to