This patch is the first patch based on the RFC sent to llvm-dev to enable support for a prefered vector width for the vectorizer. I'll also submit a clang patch shortly to hook it up to the driver.
This stores the preference as an enum in the subtarget in order of increasing strictness because the autogenerated subtarget code needs to be able max the encoding values if both prefer-avx128 and prefer-avx256 are specified in any order.
From initial experiments there's still more work to do to prevent zmm register usage, but this gives us a baseline and plumbing that we can build on.
What's the best way to test the register width output from TTI in a lit test?