Use llvm.experimental.vector.insert instead of storing into an alloca
when generating code for these intrinsics. This defers the codegen of
the generated vector to instruction selection, allowing existing
shufflevector style optimizations to apply.
Additionally, introduce a new target transform that can recognise fixed
predicate patterns in the svbool variants of these intrinsics.
Constant doesn't imply ConstantInt. (For example, it could be the address of a global variable.)
Not sure you need to explicitly check for constants here, anyway; Builder.CreateZExt does constant folding.