how do I disable vectorization passes for a target by default?


I would like to disable vectorization on the XCore target by default.

I assume I need to push_back -fno-vectorize in clang/lib/driver/Tools.cpp for Triple::xcore.

Should I also disable the pass in llvm explicitly?
I tried setting getNumberOfRegisters in XCoreTTI::TargetTransformInfo viz:

unsigned getNumberOfRegisters(bool Vector) const {
if (Vector) {
return 0;
return 12;

But this made no difference (I need to double check).

What is the correct way to disable vectorization passes?


Hi Robert,

The best way is to push “-vectorize-loops=false”. You can look at PassManagerBuilder.cpp in LLVM to see the flag. You can also run "clang -###” to see which flags the compiler driver passes. Setting the register number will only influence the unroll-factor of the vectorized code. You would also want to vectorize the SLP-vectorizer in a similar way.