https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119681
--- Comment #10 from Artemiy Volkov <artemiy at synopsys dot com> --- (In reply to Andrew Pinski from comment #9) > Note I think the bigger issue is the RTL unroller does do introduce new > pseudo registers when it is copying basic blocks and does not do live range > splitting which is why you get the moves inside the loop. I think your hack > might fix the exit block, it does not fix the overall issue. CMIIW, but this live range splitting is done a bit later by web and works well in the case where those pseudos' live ranges can be split without changing the CFG. To handle the case when multiple definitions of a variable are visible at the exit BB, you need to create copies of the exit BB before you can rename the variable, which is what I do in this patch.