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.)