On Thu, Dec 13, 2018 at 6:36 PM H.J. Lu <hongjiu...@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 >