diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-03-22 11:26:33 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-03-22 11:26:33 +0100 |
commit | 539eb45985a4bc6146ee011d8a1cabd0103792fb (patch) | |
tree | 71a11b515729fc427ba11c0ed4c691277347841a /gcc/var-tracking.c | |
parent | 260f179b8d54f2343fe26a484fb52e906210cae6 (diff) | |
download | gcc-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.c | 16 |
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 |