summaryrefslogtreecommitdiff
path: root/gcc/var-tracking.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-03-22 11:26:33 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-03-22 11:26:33 +0100
commit539eb45985a4bc6146ee011d8a1cabd0103792fb (patch)
tree71a11b515729fc427ba11c0ed4c691277347841a /gcc/var-tracking.c
parent260f179b8d54f2343fe26a484fb52e906210cae6 (diff)
downloadgcc-539eb45985a4bc6146ee011d8a1cabd0103792fb.tar.gz
re PR debug/43443 (We should yank ASM_OPERANDS locs from var-tracking preserved cselib VALUEs)
PR debug/43443 * var-tracking.c (add_cselib_value_chains): Remove ASM_OPERANDS locs from preserved VALUEs. From-SVN: r157620
Diffstat (limited to 'gcc/var-tracking.c')
-rw-r--r--gcc/var-tracking.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index c11d11953f4..cec6c3442df 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -2791,15 +2791,23 @@ add_value_chains (decl_or_value dv, rtx loc)
}
/* If CSELIB_VAL_PTR of value DV refer to VALUEs, add backlinks from those
- VALUEs to DV. */
+ VALUEs to DV. Add the same time get rid of ASM_OPERANDS from locs list,
+ that is something we never can express in .debug_info and can prevent
+ reverse ops from being used. */
static void
add_cselib_value_chains (decl_or_value dv)
{
- struct elt_loc_list *l;
+ struct elt_loc_list **l;
- for (l = CSELIB_VAL_PTR (dv_as_value (dv))->locs; l; l = l->next)
- for_each_rtx (&l->loc, add_value_chain, dv_as_opaque (dv));
+ for (l = &CSELIB_VAL_PTR (dv_as_value (dv))->locs; *l;)
+ if (GET_CODE ((*l)->loc) == ASM_OPERANDS)
+ *l = (*l)->next;
+ else
+ {
+ for_each_rtx (&(*l)->loc, add_value_chain, dv_as_opaque (dv));
+ l = &(*l)->next;
+ }
}
/* If decl or value DVP refers to VALUE from *LOC, remove backlinks