[llvm-dev] Separate LoopVectorize LLVM pass
Alex Susu via llvm-dev
llvm-dev at lists.llvm.org
Fri Apr 14 13:04:49 PDT 2017
I am trying to create my own LoopVectorize.cpp pass as a separate pass from the LLVM
trunk, as described in http://llvm.org/docs/CMake.html#embedding-llvm-in-your-project. Did
anybody try something like this?
I added close to the end of the .cpp file:
/* this line seems to be required - it allows to run this pass
as an embedded pass by giving opt -my-loop-vectorize */
static RegisterPass<LoopVectorize> Z("my-loop-vectorize",
"Write comments in source file.");
Note that I did NOT register my new pass in
llvm/lib/Transforms/IPO/PassManagerBuilder.cpp - the original LoopVectorize module is
However, when I give:
opt -debug -load NewLoopVectorize.so -my-loop-vectorize test.c
it does not vectorize a loop that was normally vectorized by the original
LoopVectorize module in LLVM. My module gives:
<<loop not vectorized: loop control flow is not understood by vectorizer
LV: Not vectorizing: Cannot prove legality.>>
So I tried to explicitly run a few more passes before my new LoopVectorize to help it
(I think the most important one is -loop-simplify, which canonicalizes the loop):
opt -debug -loop-simplify -mem2reg -lcssa -load NewLoopVectorize.so
However, I do not see any line in the output of opt starting with "LoopSimplify"
(when I have success, when I give opt -O3, I get "LoopSimplify: Creating pre-header
for.body.preheader; LoopSimplify: Creating dedicated exit block for.end.loopexit" before
LoopVectorize) and my LoopVectorize still does not vectorize the loop.
Can anybody help me run explicitly the LoopSimplify pass (before my LoopVectorize pass)?
Thank you. And wish you happy Easter holidays!
More information about the llvm-dev