The patch extends the vectorization pass to lower linalg index operations to vector code. It allocates constant 1d vectors that enumerate the indexes along the iteration dimensions and broadcasts/transposes these 1d vectors to the iteration space.
Please give @nicolasvasilache a chance to review.
Naming nit: "StaticOperandDims" was confusing to me consider swapping to "OperandStaticDims" that makes clear _what_ is static (dimensions)
llvm::append_range(res, t.getShape()) spares you the loop, and decreases the number of dynamic allocations
Nit: please spell out the auto. We generally use auto when the type is excessively long (iterators, lambdas) or evident from context (RHS is a cast).