We have a large portfolio of folds for and-of-icmps and or-of-icmps in InstSimplify and InstCombine, but hardly anything for xor-of-icmps.
Rather than trying to rethink and translate all of those folds, we can use the truth table definition of xor:
X ^ Y --> (X | Y) & !(X & Y)
...to see if we can convert the xor to and/or and then use the existing folds.
I find that visualizing the sets for xor (https://en.wikipedia.org/wiki/Symmetric_difference) is just plain harder than and/or...and maybe that's why these folds don't exist yet. :)
I've been using Alive to verify that we're doing the correct transforms in these cases:
http://rise4fun.com/Alive/J9v