Commit 8ab1d2e9 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 5b9ad1d4
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> 2013-01-02 Gerald Pfeifer <gerald@pfeifer.com>
* doc/contrib.texi: Note years as release manager for Mark Mitchell. * doc/contrib.texi: Note years as release manager for Mark Mitchell.
/* params.def - Run-time parameters. /* params.def - Run-time parameters.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
2011, 2012 2011, 2012, 2013
Free Software Foundation, Inc. Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>. Written by Mark Mitchell <mark@codesourcery.com>.
...@@ -869,6 +869,14 @@ DEFPARAM (PARAM_MAX_VARTRACK_EXPR_DEPTH, ...@@ -869,6 +869,14 @@ DEFPARAM (PARAM_MAX_VARTRACK_EXPR_DEPTH,
"Max. recursion depth for expanding var tracking expressions", "Max. recursion depth for expanding var tracking expressions",
12, 0, 0) 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. */ /* Set minimum insn uid for non-debug insns. */
DEFPARAM (PARAM_MIN_NONDEBUG_INSN_UID, DEFPARAM (PARAM_MIN_NONDEBUG_INSN_UID,
......
/* Variable tracking routines for the GNU compiler. /* Variable tracking routines for the GNU compiler.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012 Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012,
Free Software Foundation, Inc. 2013 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -5545,6 +5545,7 @@ reverse_op (rtx val, const_rtx expr, rtx insn) ...@@ -5545,6 +5545,7 @@ reverse_op (rtx val, const_rtx expr, rtx insn)
cselib_val *v; cselib_val *v;
struct elt_loc_list *l; struct elt_loc_list *l;
enum rtx_code code; enum rtx_code code;
int count;
if (GET_CODE (expr) != SET) if (GET_CODE (expr) != SET)
return; return;
...@@ -5586,10 +5587,13 @@ reverse_op (rtx val, const_rtx expr, rtx insn) ...@@ -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 /* 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 location. Ignore ENTRY_VALUE, while it is always constant, we should
prefer non-ENTRY_VALUE locations whenever possible. */ 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) if (CONSTANT_P (l->loc)
&& (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0))) && (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0)))
return; return;
/* Avoid creating too large locs lists. */
else if (count == PARAM_VALUE (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE))
return;
switch (GET_CODE (src)) switch (GET_CODE (src))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment