This is an archive of the discontinued LLVM Phabricator instance.

[MachineOutliner] Add "thunk" outlining for AArch64.
ClosedPublic

Authored by efriedma on May 21 2018, 6:12 PM.

Details

Summary

When we're outlining a sequence that ends in a call, we can save up to three instructions in the outlined function by turning the call into a tail-call. I refer to this as thunk outlining because the resulting outlined function looks like a thunk; suggestions welcome for a better name.

In addition to making the outlined function shorter, thunk outlining allows outlining calls which would otherwise be illegal to outline: we don't need to save/restore LR, so we don't need to prove anything about the stack access patterns of the callee.

To make this work effectively, I also added MachineOutlinerInstrType::LegalTerminator to the generic MachineOutliner code. This allows treating an arbitrary instruction as a terminator in the suffix tree. (I also experimented with rejecting sequences from getOutlininingCandidateInfo, but it didn't work as well.)

Diff Detail

Repository
rL LLVM

Event Timeline

efriedma created this revision.May 21 2018, 6:12 PM
paquette accepted this revision.May 22 2018, 10:14 AM

Cool! LGTM.

This revision is now accepted and ready to land.May 22 2018, 10:14 AM
This revision was automatically updated to reflect the committed changes.