On Tue, Apr 18, 2017 at 09:30:19AM +0000, Segher Boessenkool wrote: > In split_live_ranges_for_shrink_wrap IRA also splits regs that are > only used in debug insns, leading to -fcompare-debug failures. > > Bootstrapped and tested on powerpc64-linux {-m32,-m64}. This happens > on at least GCC 5, so not a regression; but it is trivial and obvious, > is it okay for trunk anyway?
I think the first question here is if it is beneficial to replace the regs in DEBUG_INSNs or not. If it is beneficial, then it of course has to be changed such that it never does newreg = ira_create_new_reg (dest); just because it sees DEBUG_INSN uses, but otherwise it should do what it does now. So one option is e.g. to split that loop into two, one doing analysis, i.e. that newreg = ira_create_new_reg (dest);, but not validate_change (uin, DF_REF_REAL_LOC (use), newreg, true); and this loop would also ignore DEBUG_INSN_P. And the other loop, with the same content, just without that newreg = ... and with the validate_change, as whole guarded with if (newreg), replacing stuff on all insns. Or another way to write this is have the loop as currently is, with if (DEBUG_INSN_P (uin) && (!newreg || debug_insns_seen_p)) { debug_insns_seen_p = true; continue; } and then another loop done only if (debug_insns_seen_p && newreg) that would only adjust DEBUG_INSNs. Jakub