See D42509 for the original version of this.
Basically, there are two significant changes to behavior here:
- addLiveOuts always adds all pristine registers (even if a block has no successors).
- addLiveOuts and addLiveOutsNoPristines always add all callee-saved registers for return blocks (including conditional return blocks).
I cleaned up the functions a bit to make it clear these properties hold.