http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53623
Jeffrey A. Law <law at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at redhat dot com --- Comment #8 from Jeffrey A. Law <law at redhat dot com> --- Jakub, I'm playing with some of your ideas from c#5. It's actually not a bad approach to fixing this problem. Presumably in the REGNO != REGNO case, if we were to allow it, the requirement that there be a single reaching def is so that we don't end up with different destination registers in the different reaching defs. Right? It also makes updating marginally easier as there's only one def to fixup. I don't offhand recall a good way to test that the extension under consideration dominates all the others. Can't they be in arbitrary blocks and locations within the blocks? And "all the others" presumably means other users of the original memory load, right? What did you have in mind for testing this? We definitely want to change the destination of the load to use the other register and emit a copy from the other register to the load's original destination. That insn needs to be emitted immediately after the defining insn. And yes, the hard register propagation pass should propagate away the copy most of the time. Anyway, it's showing enough promise that I'll keep poking.