There's currently only one way to vectorize a loop - by using the LoopVectorize driver pass. But there's no real reason to have this restriction.
Taking examples from elsewhere in the codebase, I've created an API that takes all its dependencies explicitly and can be called from anywhere in the codebase (subject to layering violations of course).
LoopVectorize turns into a shell wrapper pass, which takes its dependencies from the pass manager and dumbly passes them on to the new LoopVectorization class.
The API makes a distinction between loop vectorization and loop interleaving. Even though these are very conflated within the loop vectorizer, I felt it was important to keep them separate at the API level.
s/Add/add