This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] x86: Don't use get_frame_size to finalize stack frame
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: "H. J. Lu" <hjl dot tools at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 14 Dec 2018 08:11:06 +0100
- Subject: Re: [PATCH] x86: Don't use get_frame_size to finalize stack frame
- References: <20181213173637.GA30946@intel.com>
On Thu, Dec 13, 2018 at 6:36 PM H.J. Lu <hongjiu.lu@intel.com> wrote:
>
> get_frame_size () returns used stack slots during compilation, which
> may be optimized out later. Since ix86_find_max_used_stack_alignment
> is called by ix86_finalize_stack_frame_flags to check if stack frame
> is required, there is no need to call get_frame_size () which may give
> inaccurate final stack frame size.
>
> Tested on AVX512 machine configured with
>
> --with-arch=native --with-cpu=native
>
> OK for trunk?
>
>
> H.J.
> ---
> gcc/
>
> PR target/88483
> * config/i386/i386.c (ix86_finalize_stack_frame_flags): Don't
> use get_frame_size ().
>
> gcc/testsuite/
>
> PR target/88483
> * gcc.target/i386/stackalign/pr88483.c: New test.
LGTM, but you know this part of the compiler better than I.
Thanks,
Uros.
> ---
> gcc/config/i386/i386.c | 1 -
> .../gcc.target/i386/stackalign/pr88483.c | 17 +++++++++++++++++
> 2 files changed, 17 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.target/i386/stackalign/pr88483.c
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index caa701fe242..edc8f4f092e 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -12876,7 +12876,6 @@ ix86_finalize_stack_frame_flags (void)
> && flag_exceptions
> && cfun->can_throw_non_call_exceptions)
> && !ix86_frame_pointer_required ()
> - && get_frame_size () == 0
> && ix86_nsaved_sseregs () == 0
> && ix86_varargs_gpr_size + ix86_varargs_fpr_size == 0)
> {
> diff --git a/gcc/testsuite/gcc.target/i386/stackalign/pr88483.c b/gcc/testsuite/gcc.target/i386/stackalign/pr88483.c
> new file mode 100644
> index 00000000000..5aec8fd4cf6
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/stackalign/pr88483.c
> @@ -0,0 +1,17 @@
> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
> +/* { dg-options "-O2 -mavx2" } */
> +
> +struct B
> +{
> + char a[12];
> + int b;
> +};
> +
> +struct B
> +f2 (void)
> +{
> + struct B x = {};
> + return x;
> +}
> +
> +/* { dg-final { scan-assembler-not "and\[lq\]?\[^\\n\]*-\[0-9\]+,\[^\\n\]*sp" } } */
> --
> 2.19.2
>