This is one of the cases shown in:
https://llvm.org/bugs/show_bug.cgi?id=26819
Shift and negate is what InstCombine prefers to produce (and I tried to make it do more of that in http://reviews.llvm.org/rL262424 ), so we should recognize that pattern as something that might come from autovectorization even if it's unlikely to be produced from C NEON intrinsics.
The patch is largely a copy/paste of the x86 equivalent:
http://reviews.llvm.org/rL262036
...so it might be worth noting as something that could be refactored into DAGCombiner so all backends can share it.
This looks like a vestige of x86's different levels of vector support. On AArch64 all vector types are legal or none are.
So I'd suggest making this *just* the NEON check (or even an assertion), and moving the foldVectorXorShiftIntoCmp call below the isBeforeLegalizeOps check.