[gcc(refs/users/marxin/heads/marxin-gcc-benchmark-branch)] var-tracking: Mark as sp based more VALUEs [PR92264]

Martin Liska marxin@gcc.gnu.org
Mon Mar 30 11:07:49 GMT 2020


https://gcc.gnu.org/g:9708ca2be40399d6266bc85c99e085e3fe27a809

commit 9708ca2be40399d6266bc85c99e085e3fe27a809
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Thu Mar 26 09:15:39 2020 +0100

    var-tracking: Mark as sp based more VALUEs [PR92264]
    
    With this simple patch, on i686-linux and x86_64-linux with -m32 (no change
    for -m64), the find_base_term visited_vals.length () > 100 find_base_term
    statistics changed (fbt is before this patch, fbt2 with this patch):
    for k in '' '1$'; do for i in 32 64; do for j in fbt fbt2; do \
    echo -n "$j $i $k "; LC_ALL=C grep ^$i.*"$k" $j | wc -l; done; done; done
    fbt 32  5313355
    fbt2 32  4229854
    fbt 64  217523
    fbt2 64  217523
    fbt 32 1$ 1296
    fbt2 32 1$ 407
    fbt 64 1$ 0
    fbt2 64 1$ 0
    For frame_pointer_needed functions, we need to wait until we see the
    fp_setter insn in the prologue at which point we disassociate the fp based
    VALUEs from sp based VALUEs, but for !frame_pointer_needed functions,
    we IMHO don't need to wait anything.  For ACCUMULATE_OUTGOING_ARGS it isn't
    IMHO worth doing anything, as there is a single sp adjustment and so there
    is no risk of many thousands deep VALUE chains, but for
    !ACCUMULATE_OUTGOING_ARGS the sp keeps changing constantly.
    
    2020-03-26  Jakub Jelinek  <jakub@redhat.com>
    
            PR rtl-optimization/92264
            * var-tracking.c (add_stores): Call cselib_set_value_sp_based even
            for sp based values in !frame_pointer_needed
            && !ACCUMULATE_OUTGOING_ARGS functions.

Diff:
---
 gcc/ChangeLog      | 7 +++++++
 gcc/var-tracking.c | 3 ++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f7927d748f..180c92f76f7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2020-03-26  Jakub Jelinek  <jakub@redhat.com>
+
+	PR rtl-optimization/92264
+	* var-tracking.c (add_stores): Call cselib_set_value_sp_based even
+	for sp based values in !frame_pointer_needed
+	&& !ACCUMULATE_OUTGOING_ARGS functions.
+
 2020-03-26  Felix Yang  <felix.yang@huawei.com>
 
 	PR tree-optimization/94269
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 9984565cd5f..a9ca16b0f04 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -6112,7 +6112,8 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
     }
 
   if (loc == stack_pointer_rtx
-      && maybe_ne (hard_frame_pointer_adjustment, -1)
+      && (maybe_ne (hard_frame_pointer_adjustment, -1)
+	  || (!frame_pointer_needed && !ACCUMULATE_OUTGOING_ARGS))
       && preserve)
     cselib_set_value_sp_based (v);


More information about the Gcc-cvs mailing list