diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-01-03 09:52:10 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-01-03 09:52:10 +0100 |
commit | 8ab1d2e90f3e49593e490bc70199c4b97155f4ba (patch) | |
tree | ab1c0af1ec8a5ce47a04a16d888444033de856b7 | |
parent | 5b9ad1d443bb056576947a6050226c38d106c873 (diff) | |
download | gcc-8ab1d2e90f3e49593e490bc70199c4b97155f4ba.zip gcc-8ab1d2e90f3e49593e490bc70199c4b97155f4ba.tar.gz gcc-8ab1d2e90f3e49593e490bc70199c4b97155f4ba.tar.bz2 |
re PR debug/54402 (var-tracking does not scale)
PR debug/54402
* params.def (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE): New param.
* var-tracking.c (reverse_op): Don't add reverse ops to
VALUEs that have already
PARAM_VALUE (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE) or longer
locs list.
From-SVN: r194834
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/params.def | 10 | ||||
-rw-r--r-- | gcc/var-tracking.c | 10 |
3 files changed, 25 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1dda60..0c89cc4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2013-01-03 Jakub Jelinek <jakub@redhat.com> + + PR debug/54402 + * params.def (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE): New param. + * var-tracking.c (reverse_op): Don't add reverse ops to + VALUEs that have already + PARAM_VALUE (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE) or longer + locs list. + 2013-01-02 Gerald Pfeifer <gerald@pfeifer.com> * doc/contrib.texi: Note years as release manager for Mark Mitchell. diff --git a/gcc/params.def b/gcc/params.def index 38aaf4b..a307b71 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -1,6 +1,6 @@ /* params.def - Run-time parameters. Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011, 2012 + 2011, 2012, 2013 Free Software Foundation, Inc. Written by Mark Mitchell <mark@codesourcery.com>. @@ -869,6 +869,14 @@ DEFPARAM (PARAM_MAX_VARTRACK_EXPR_DEPTH, "Max. recursion depth for expanding var tracking expressions", 12, 0, 0) +/* Set maximum length of value location list for which var tracking + should add reverse operations. */ + +DEFPARAM (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE, + "max-vartrack-reverse-op-size", + "Max. size of loc list for which reverse ops should be added", + 50, 0, 0) + /* Set minimum insn uid for non-debug insns. */ DEFPARAM (PARAM_MIN_NONDEBUG_INSN_UID, diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index f5ba115..9f1a507 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -1,6 +1,6 @@ /* Variable tracking routines for the GNU compiler. - Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012 - Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, + 2013 Free Software Foundation, Inc. This file is part of GCC. @@ -5545,6 +5545,7 @@ reverse_op (rtx val, const_rtx expr, rtx insn) cselib_val *v; struct elt_loc_list *l; enum rtx_code code; + int count; if (GET_CODE (expr) != SET) return; @@ -5586,10 +5587,13 @@ reverse_op (rtx val, const_rtx expr, rtx insn) /* Adding a reverse op isn't useful if V already has an always valid location. Ignore ENTRY_VALUE, while it is always constant, we should prefer non-ENTRY_VALUE locations whenever possible. */ - for (l = v->locs; l; l = l->next) + for (l = v->locs, count = 0; l; l = l->next, count++) if (CONSTANT_P (l->loc) && (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0))) return; + /* Avoid creating too large locs lists. */ + else if (count == PARAM_VALUE (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE)) + return; switch (GET_CODE (src)) { |