LLVM autovectorization support

I would like to know the status of the autovectorization support in LLVM. does LLVM have a loop dependence analysis, does LLVM have a infrastructure for autovectorization ? etc.

Kind Regards

Xin Tong

Not yet, but it's getting there...



Yes. In Polly we are working on autovectorization using polyhedral techniques. Polly is currently founded as a research project (for the next three years), but we plan to provide solutions that can be applied on real world programs.

Feel free to have a look at our recent publications, the example on the website, our performance statistics and obviously the source code. Keep in mind that this is still a young research project. Even if we use established polyhedral techniques applying this to LLVM is not 100% straightforward. Especially the way we do vectorization is different to the one used in GCC or ICC as we currently use 100% polyhedral techniques, without any pattern matching. This is a nice and clean approach, but may lead to compile time performance problems, we may have problems to model specific situations and we obviously miss the years of development that went into the pattern/tricks ICC uses. On the positive side, the use of polyhedral techniques will allow us to use the same/similar techniques to offload calculations e.g. to vector accelerators (An interesting and active topic of research).

In terms of loop dependence analysis we use a powerful integer set library to get exact dependency analysis for loops with static control flow and affine linear memory accesses.

You may have a look at the matmul example which also includes the results of our dependency analysis:


If you have any questions feel free to ask. Please tag the questions on this mailinglist with [polly] or just use our own development mailing list. Also I am highly interested in ->critical<- feedback.