[LLVMdev] Fail to unroll loop on simple examples.
Claude Helmstetter
claude.helmstetter at gmail.com
Thu Jul 1 03:48:43 PDT 2010
Hi all,
I have tried to use the loop-unroll pass on a large example, but without
success. So I have tried on smaller examples, and I did not get more
success.
My simplest example is attached. It comes from this C code (using llvm-gcc,
but similar result with clang):
int main (int argc, char *argv[]) {
int i;
for (i = 0; i!=5; ++i) {}
return 0;
}
I use this command (version 2.8svn, from July 1st)
~/Build/llvm-trunk/Release/bin/opt -mem2reg -indvars -loop-unroll -stats
loop.ll | llvm-dis
Whereas ScalarEvolution can compute the loop count, LoopInfo fails because
the conditional branch is not in the expected block. If I provide the loop
count with -unroll-count=5, then the function UnrollLoop fails form the same
reason. The pass "-loopsimplify" has no effect.
If I add the pass "-loop-rotate" before "-indvars", then the loop is
successfully unrolled. However, I think this pass may increase the size of
the code for all loops, including the loops that cannot be unrolled.
Is this a bug? Or is there any other pass that can help UnrollLoop?
--
Claude Helmstetter
+86 186 0895 4884 / +33 6 32 99 06 00
http://formes.asia/people/Claude.Helmstetter/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100701/ca0cf370/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: loop.ll
Type: application/octet-stream
Size: 920 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100701/ca0cf370/attachment.obj>
More information about the llvm-dev
mailing list