On Wed, Aug 26, 2015 at 04:56:23PM +0200, Richard Biener wrote: > >> How do you declare those? > > > > Something like this: > > > > #pragma omp declare simd inbranch > > int foo(int*); > > The 'inbranch' is the thing that matters? And all of foo is then > implicitely predicated?
If it is #pragma omp declare simd notinbranch, then only the non-predicated version is emitted and thus it is usable only in vectorized loops inside of non-conditional contexts. If it is #pragma omp declare simd inbranch, then only the predicated version is emitted, there is an extra argument (either V*QI if I remember well, or for AVX-512 short/int/long bitmask), if the caller wants to use it in non-conditional contexts, it just passes all ones mask. For #pragma omp declare simd (neither inbranch nor notinbranch), two versions are emitted, one predicated and one non-predicated. Jakub