https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69447
--- Comment #7 from Vladimir Makarov <vmakarov at gcc dot gnu.org> --- (In reply to Richard Henderson from comment #6) > ... except that's not the same set of live ranges > computed by IRA: > > Insn 55(l0): point = 9 > Insn 70(l0): point = 11 > ... > Insn 50(l0): point = 19 > ... > Insn 21(l0): point = 61 > Insn 19(l0): point = 65 > Insn 17(l0): point = 67 > > a3(r111 [0]): [10..67] > a3(r111 [1]): [62..67] > > If we remat insn 21 into insn 50, we don't extend the lifetime > of r111[0], but we do extend the lifetime of r111[1]. > > The problem appears to be that IRA takes subregs into account > but LRA doesn't. Vlad, am I on the right track here? May be. Bernd extended IRA lately to follow separate subreg live ranges (only 2 subregs). LRA does not do that.