[LLVMdev] LLVM Loop Vectorizer puzzle

Arnold Schwaighofer aschwaighofer at apple.com
Thu May 23 07:37:55 PDT 2013


On May 23, 2013, at 9:15 AM, Renato Golin <renato.golin at linaro.org> wrote:

> On 23 May 2013 14:52, Arnold Schwaighofer <aschwaighofer at apple.com> wrote:
> I would like us to grow a few annotations, among others, one to force vectorization irrespective whether the loop vectorizer thinks it is beneficial or not - however, this is future music.
> 
> Isn't that part of the ivdep implementation? I thought there was support for that already...

No, llvm.loop.parallel only communicates information about memory dependencies (or there absence of) and the loop vectorizer only uses it for this. I don’t think we should give it additional semantics of forcing vectorization.

Of course, you could locally patch llvm to abuse it for other purposes...


(Note, I have not formed a strong opinion on this yet, these are just some initial thoughts, I am not convinced yet that the attributes below are the right set of attributes, or that the syntax is right ;)

I am thinking of something like:

llvm.vectorization.<param><value>


where which would allow us to safety and optimization parameters from the front end:


- Safety:
 #pragma vectorize [max_iterations <NUM>]

 For vectorization we might want to have an optional parameters at which distance vectorization is safe:
 #pragma vectorize max_iterations 8
 would indicate that vectorization up to a distance 8 is safe. This would restrict the combinations of VF and unroll factor the vectorizer is allowed to choose.

- Parameters controlling the vectorizer optimization choices:
 width, unroll factor, force vectorization at Os, don’t vectorize

#pragma vectorize width 4 unroll 2
Forces VF=4 and unroll=2

#pragma vectorize max_iterations 8
Allows the vectorizer to choose.

#pragma vectorize off
Disable vectorization.

#pragma vectorize force


If we decide, that

#pragma ivdep

should imply forced vectorization (which I am not sure it should), the front-end can than in addition to the llvm.loop.parallel metadata, emit meta data to force vectorization. But, I don’t think we should overload the semantics of llvm.loop.parallel.



More information about the llvm-dev mailing list