This batch of intrinsics includes lots of things that move vector data
around or change its type without really affecting its value very
much. It includes the vreinterpretq family (cast one vector type to
another); vuninitializedq (create a vector of a given type with
don't-care contents); and vcreateq (make a 128-bit vector out of two
uint64_t halves).
These are all implemented using completely standard IR that's already
tested in existing LLVM unit tests, so I've just written a clang test
to check the IR is correct, and left it at that.
I've also added some richer infrastructure to the MveEmitter Tablegen
backend, to make it specify the exact integer type of integer
arguments passed to IR construction functions, and wrap those
arguments in a static_cast in the autogenerated C++. That was
necessary to prevent an overloading ambiguity when passing the integer
literal 0 to IRBuilder::CreateInsertElement, because otherwise, it
could mean either a null pointer llvm::Value * or a zero uint64_t.
Indent this line by an extra 4 spaces.
I'm going to have to trust you that it's doing the right thing. The !eq has to be on two strings?