+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.
/* 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>.
"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,
/* 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.
cselib_val *v;
struct elt_loc_list *l;
enum rtx_code code;
+ int count;
if (GET_CODE (expr) != SET)
return;
/* 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))
{