For NF > we can't use the same tricks we use for the NF == 2 case, so
instead we're just generalizing the vrgather paths.
This also handles the re-concatenation of vectors a bit differently now,
as it's possible to get operands of a valid type but end up with a
result type that's invalid, e.g. nx2vi32 * 3 -> nx6vi32. Now we extend
the vector to the next power of two in the hopes that it's valid, e.g.