an actual answer for you:
Intel 64 and IA-32 Architectures Optimization Reference Manual
Section 3.5.1.8 is where you want to look.
In short there are situations where an xor or a mov may be preferred. The issues center around dependency chains and preservation of condition codes.