[llvm-dev] Does OpenMP hints bypass the vectorisation legality check in llvm
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 19 13:37:07 PST 2018
Yes, OpenMP SIMD hints are currently translated into metadata that is
used by the vectorizer. If you'd like to know how that's done, see:
(and should also enable the vectorizer:
The relevant Clang code is in clang/lib/CodeGen/CGLoopInfo.cpp and
lib/CodeGen/CGStmtOpenMP.cpp (see, in particular, the comments around
emitSimdlenSafelenClause and EmitOMPSimdInit regarding safelen and
The relevant check for the vectorizer is in LoopAccessAnalysis.cpp:
const bool IsAnnotatedParallel = TheLoop->isAnnotatedParallel();
where isAnnotatedParallel checks for the parallel-loop-access metadata
(that indicates that the loop is data parallel) and is part of LoopInfo.
On 01/19/2018 02:38 AM, Tom Sun via llvm-dev wrote:
> Hi all,
> I am currently looking into how "#pragma omp for simd" is actually
> recognized in llvm. To my knowledge, clang will parse it and set
> metadata in IR to indicate this force-vectorization hint and later
> optimization passes would read it and vectorize the marked loop.
> Therefore, the loop should be vectorized even the compiler think it
> might not be safe to do so?
> So my assumption is that such force-vectorization hints should bypass
> both the vectorization legality and cost model check. However, in
> LoopVectorize.cpp, I can't see how this is done. All loops will be
> sent to a legality check of LVL.canVectorize() and, if this condition
> does not fit, it return to false directly without actually reaching
> the vectorization stage.
> Is there anything wrong with my assumption made on the use of
> force-vectorization hints?
> Thanks in advance,
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev