[llvm-branch-commits] [llvm] [LivePhysRegs] Add callee-saved regs from MFI in addLiveOutsNoPristines. (PR #73553)

Krzysztof Parzyszek via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Nov 28 10:16:46 PST 2023


kparzysz wrote:

> @kparzysz please take a loo at https://gist.github.com/fhahn/67937125b64440a8a414909c4a1b7973, which has much more limited impact.

If it's an urgent issue, then it's fine to have a limited-impact fix.  I think the root issue still remains though.

> If LR isn't marked as live in that case, other passes are free to clobber LR (e.g. the machine-outliner by introducing calls using BL, as in https://github.com/llvm/llvm-project/blob/20f634f275b431ff256ba45cbcbb6dc5bd945fb3/llvm/test/CodeGen/Thumb2/outlined-fn-may-clobber-lr-in-caller.ll

Does the outliner run after PEI?  If the callee has to ensure the correct value of the LR before returning (via a tail call for example), then the PEI code should take care of that.  It would see the call to the outlined procedure and do the right thing.  After PEI the liveness of LR needs to be accurately reflected and tail calls could (should?) always "use" LR.  That would either prevent outlining or cause the outliner to preserve LR across introduced calls.

On the caller side, the call instruction clobbers LR, so it can't really be considered live-out (unless the calling convention requires it to be preserved, which I think it doesn't).

https://github.com/llvm/llvm-project/pull/73553


More information about the llvm-branch-commits mailing list