On 1/14/20 12:18 PM, Jan Hubicka wrote:
PING^1

On 1/3/20 12:23 PM, Martin Liška wrote:
Hi.

I'm not fully sure about the change, but -momit-leaf-frame-pointer
probably should not globally omit frame pointers?

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2020-01-03  Martin Liska  <mli...@suse.cz>

      PR tree-optimization/92860
      * config/i386/i386-options.c (ix86_option_override_internal):
      Do not enable -fomit-frame-pointer with -momit-leaf-frame-pointer
      as it will globally omit pointers (like in ira.c).

Does gcc omit frame pointer of leaf functions after your change?
My recollection how this code works is that flag_omit_frame_pointer is
needed for regalloc to consider omitting at first plce and then it
queries frame_pointer_required hook wihch if only
-momit-leaf-frame-pointer is used will return true for all non-leaf
functions so effectivly only leaf ones are omitted.

I've got it.


If you stop setting the flag I think IRA will not consider omitting at
all and whole flag will become noop.

Yes, then patch is then incorrect. We would needs something like:

diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
index 2acc9fb0cfe..ec538724581 100644
--- a/gcc/config/i386/i386-options.c
+++ b/gcc/config/i386/i386-options.c
@@ -1671,6 +1671,9 @@ ix86_recompute_optlev_based_flags (struct gcc_options 
*opts,
            opts->x_flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
        }
     }
+
+  if (TARGET_OMIT_LEAF_FRAME_POINTER_P (opts->x_target_flags))
+    opts->x_flag_omit_frame_pointer = 1;
 }
/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook. */
@@ -2437,8 +2440,6 @@ ix86_option_override_internal (bool main_args_p,
   /* Keep nonleaf frame pointers.  */
   if (opts->x_flag_omit_frame_pointer)
     opts->x_target_flags &= ~MASK_OMIT_LEAF_FRAME_POINTER;
-  else if (TARGET_OMIT_LEAF_FRAME_POINTER_P (opts->x_target_flags))
-    opts->x_flag_omit_frame_pointer = 1;
/* If we're doing fast math, we don't care about comparison order
      wrt NaNs.  This lets us use a shorter comparison sequence.  */

But it does not work as opts->x_target_flags is changed for some reason
for a per-function opts.

Martin


Honza


Reply via email to