On Wed, Sep 14, 2016 at 01:35:57PM -0600, Jeff Law wrote: > On 09/14/2016 01:03 PM, Segher Boessenkool wrote: > > > >(There is no return insn at those exits; these are exits *without* > >successor block, not the exit block). > Hmm, I thought these were return blocks, but you're saying they're > no-return blocks? I missed that. > > In that case, aren't the restores dead because no callers can observe > their value changing unexpectedly?
Yes, but DCE can not remove the insns because dwarf2cfi would throw a fit (and for good reason). That is why adding all these USEs makes the DCE patch unnecessary (that patch simply disallows deleting insns with a REG_CFA_RESTORE note, much simpler than all that USE surgery, and perfectly correct and pretty much the best we can do). The problem is that regrename decides to rename a (volatile) register to some non-volatile register that is *not* separately shrink-wrapped (and not actually dead there). Why would it do that, why would it not do that if not separately shrink-wrapping at all? (I did run this with checking=yes,rtl btw, it is not simple corruption). Segher