When a call returns one of its arguments this is considered a cast by stripPointerCasts. So IR returning that directly from a tail call (which should be fine) can become muddied and seem to return an argument from earlier in the function.
This adds some simple checks to spot this situation and reclassify it as the original "tail call -> phi -> return" dataflow.