Message ID | 20110705200651.GG2687@tyan-ft48-01.lab.bos.redhat.com |
---|---|
State | New |
Headers | show |
> So you prefer something like this (untested) instead? I think that, ideally, we should avoid leaving the dead_debug chain in the semi-broken state that we currently have. > Without the second loop I have no idea how to make it work in > dead_debug_reset, the other dead_debug_use referencing the same insn might > be earlier or later in the chain. I guess I was somehow hoping that you could use one of the numerous DF links to get to the other uses; probably not, in the end, indeed. But you can set a flag in the first loop in order to decide whether to run the second loop. But I don't really have a strong opinon so, if you think that the original patch is good enough, fine with me. Maybe use gcc_checking_assert though.
--- gcc/df-problems.c 2011-07-04 19:17:50.757435754 +0200 +++ gcc/df-problems.c 2011-07-05 22:04:19.817464710 +0200 @@ -3117,6 +3117,25 @@ dead_debug_reset (struct dead_debug *deb else tailp = &(*tailp)->next; } + + /* If any other dead_debug_use structs refer to the debug insns + that have been reset above, remove them too. */ + if (debug->to_rescan != NULL) + { + tailp = &debug->head; + while ((cur = *tailp)) + { + insn = DF_REF_INSN (cur->use); + if (bitmap_bit_p (debug->to_rescan, INSN_UID (insn)) + && VAR_LOC_UNKNOWN_P (INSN_VAR_LOCATION_LOC (insn))) + { + *tailp = cur->next; + XDELETE (cur); + } + else + tailp = &(*tailp)->next; + } + } } /* Add USE to DEBUG. It must be a dead reference to UREGNO in a debug