This enables a method sending an autorelease message to an object and returning the object in MRR to avoid adding the object to an autorelease pool if a call to objc_retainAutoreleasedReturnValue in the caller function accepts the hand off of the retain count.
This patch assumes that methods overriding autorelease do not touch anything on the stack. I think it's safe to make this assumption since ARC optimizer marks calls to objc_autoreleaseReturnValue as tail, which wouldn't be correct if an overriding method did access something on the stack.
rdar://problem/50678052