I noticed that LLVM is less strict about the vector types than MSVC by default. For example, it doesn't produce warnings or errors when you return a _m128 to a _m128i variable or vice versa. Is this an option you can turn on in llvm?
It is possible to cast from one vector type to another, provided they are of the same size (in fact, you can also cast vectors to and from other datatypes of the same size).