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
This commit is contained in:
Jakub Jelinek 2013-01-03 09:52:10 +01:00 committed by Jakub Jelinek
parent 5b9ad1d443
commit 8ab1d2e90f
3 changed files with 25 additions and 4 deletions

View File

@ -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.

View File

@ -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,

View File

@ -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))
{