https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116028
--- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Surya Kumari Jangala from comment #14) > (In reply to Richard Earnshaw from comment #13) > > (In reply to Surya Kumari Jangala from comment #3) > > > The parameter register is > > > saved in a volatile register which is saved on stack in the entry bb. > > > Instead, if the volatile register is saved just before the call, then > > > shrink > > > wrapping will happen. > > > > /v on a register doesn't make it volatile. It simply means that the > > register refers to a variable declared in the source-code. See > > REG_USERVAR_P() in rtl.texi. > > From the input RTL to the pro_and_epilogue pass (where shrink wrap happens), > the parameter register r3 is copied to r9 which is then saved on stack. 'r9' > is a volatile register on Power. Oh I see there is some terminology issue here, volatile register usage by Surya in the above means caller saved register and is not related to volatile RTL flag (which was not being looked at).