Hi Richard, On 27/07/22 12:28 pm, Richard Biener wrote: > On Tue, Jul 26, 2022 at 8:55 PM Surya Kumari Jangala via Gcc > <gcc@gcc.gnu.org> wrote:
>> To fix the issue of insns being assigned different cycles, there are two >> possible solutions: >> >> 1. Modify no_real_insns_p() to treat a DEBUG insn as a non-real insn >> (similar to NOTE and LABEL). With this change, bb 3 will not be scheduled in >> the debug mode (as it contains only NOTE and DEBUG insns). If scheduling is >> skipped, then bb 3’s state is not copied to bb 4 and the initial dfa state >> of bb 4 will be same in both debug and non-debug modes >> 2. Copy dfa state of a basic block to it’s fall-thru block only if the basic >> block contains ‘real’ insns (ie, it should contain at least one insn which >> is not a LABEL, NOTE or DEBUG). This will prevent copying of dfa state from >> bb 3 to bb 4 in debug mode. > > Do you know why the DFA state is not always copied to the fallthru > destination and then copied further even if the block does not contain I am not sure why the DFA state is not always copied to the fallthru destination. It is not very apparent from the code. > any (real) insns? It somewhat sounds like premature optimization > breaking things here... > Now that you mention it, yes it does seem suboptimal that the DFA state is not always copied. I don’t see any reason why the DFA state shouldn’t be always copied. And I think this is the fix for this bug. '-g' mode is behaving correctly, it is the non-debug mode which is incorrect. Thanks, Surya