Improve alloca alignment
authorWilco Dijkstra <wdijkstr@arm.com>
Tue, 5 Sep 2017 13:27:58 +0000 (13:27 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 5 Sep 2017 13:27:58 +0000 (13:27 +0000)
commitae85ad3a95d6df3c4131d02fd327809a29d10b33
tree7280c7e1c75597c2c29f62ff781b46e1369249c9
parent54c430044ba9a35a590e591108b184535eba5763
Improve alloca alignment

This patch improves alloca alignment.  Currently alloca reserves
too much space as it aligns twice, and generates unnecessary stack
alignment code.

When the requested alignment is lower than the stack alignment, no
extra alignment is needed.  If the requested alignment is higher,
we need to increase the size by the difference of the requested
alignment and the stack alignment.  As a result, the alloca alignment
is exactly as expected:

alloca (16):
sub sp, sp, #16
mov x1, sp

alloca (x):
add x0, x0, 15
and x0, x0, -16
sub sp, sp, x0
mov x0, sp

__builtin_alloca_with_align (x, 512):
add x0, x0, 63
and x0, x0, -16
sub sp, sp, x0
add x0, sp, 63
and x0, x0, -64

    gcc/
* explow.c (get_dynamic_stack_size): Improve dynamic alignment.

From-SVN: r251713
gcc/ChangeLog
gcc/explow.c