early-out for self-swap