LLVM IR vectorized with opt but not through the API

Hi,

I have a simple LLVM code which loop over an array and do a simple calculation, the bytecode is here : https://gist.github.com/maattd/7322927

This code is correctly vectorized with LLVM opt 3.3, however I can’t get it to vectorize with call through the API.

Is there a way to debug the LLVM vectorizer pass with the API ?

Is there a way to just apply the exact same optimization passes as the opt tool ? I’ve tried llvm::CodeGenOpt::Aggressive but it doesn’t vectorize it neither.

Thanks,
Matthieu

Hi Matthieu,

Are you sure that it is the loop vectorizer and not the slp-vectorizer ? Also, you probably want to run mem2reg at some point, unless you generate alloca-free IR.

Thanks,
Nadav

Did you add your target’s target transform info to the pass manager?

See "http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-October/066841.html” and following for more information, "http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-October/066882.html” might contain a link to an example that might be help full.

Best,
Arnold

Hi,

I have a simple LLVM code which loop over an array and do a simple calculation, the bytecode is here : https://gist.github.com/maattd/7322927

This code is correctly vectorized with LLVM opt 3.3, however I can't get it to vectorize with call through the API.

Is there a way to debug the LLVM vectorizer pass with the API ?

Is there a way to just apply the exact same optimization passes as the opt tool ? I've tried llvm::CodeGenOpt::Aggressive but it doesn't vectorize it neither.

Have a look at lib/Transforms/IPO/PassManagerBuilder.cpp and tools/opt/opt.cpp to see how opt sets up the compilation pipeline.

Best,
Arnold