Some parts are similar to what we have * There's already `memcmp` optimization, so the predicate classification can be reused * The elements classification can be reused from `min`/`max_element` optimization * The wrappers for intrinsics can also be reused from `min`/`max_element` optimization Scope * 1 byte integers (for strings, IP addresses, binary data, etc., try to beat `memcmp`) * 2 byte integers (for wide strings) * 4 or 8 byte integers (for arrays of integers) * ~~4 or 8 byte floats (for arrays of floats, after #3928)~~ * ~~Can support infinite ranges removed in #3989 again~~