On Fri, Jan 16, 2015 at 11:03:24AM -0600, Segher Boessenkool wrote: > On Fri, Jan 16, 2015 at 08:12:27PM +1030, Alan Modra wrote: > > OK, so we need to fix this in the rs6000 backend, but it occurs to me > > that cprop also has a bug here. It shouldn't be touching fixed hard > > registers. > > Why not? It cannot allocate a fixed reg to a pseudo, but other than > that there is nothing special about fixed regs; the transform is > perfectly valid as far as I see.
I didn't say that copying to a pseudo and using that was invalid.. The bug I see is a mis-optimisation. Also, the asm operands case that do_local_cprop already rules out changing is very similar to fixed regs. Would you argue that changing asm operands is also valid? :) > It isn't a desirable transform in this case, but that is not true for > fixed regs in general (just because the stack pointer is live everywhere). What's the point in extending the lifetime of some pseudo when you know the original fixed register is available everywhere? Do you have some concrete example in mind where this "optimisation" is beneficial? Some ports even include pc in fixed_regs. So there are obvious examples where regs in fixed_regs change behind the compiler's back. Naive users might even expect to see the "current" value of those regs. (Again, I'm not saying that it is invalid if gcc substituted an older value.) -- Alan Modra Australia Development Lab, IBM