Anastasiya Ruzhanskaya via llvm-dev
2017-Jul-07 16:16 UTC
[llvm-dev] m32 flag disables vectorization
Hello, I have a simple loop, #include <stdio.h> #define N 200 int array[N]; int main() { int result = 0; int a, b, c; for (b = 0; b < N; b++) array[b] = b%3; #pragma clang loop vectorize(enable) for (a = 0; a < N; a++) { result += array[a]; } return result; } I compile it like this: clang -emit-llvm -m32 -c -O0 myarray2.c -o myarray2.s opt -mem2reg -loops -loop-simplify -loop-rotate -loop-vectorize -S myarray2.s -o opt.s and I don't see any effect of vectorization. When I delete m32 flag, vectorization is applied, Why does this happen? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170707/b54c15e6/attachment.html>
Michael Zolotukhin via llvm-dev
2017-Jul-07 17:02 UTC
[llvm-dev] m32 flag disables vectorization
Hi, I’d recommend using pass-remarks (add -pass-remarks=loop-vectorize to your opt invocation) - it might give some hints. Michael PS: For me it’s vectorized independently on using -m32:> bin/clang -emit-llvm -c -O0 1.c -o - | bin/opt -mem2reg -loops -loop-simplify -loop-rotate -loop-vectorize -o /dev/null -pass-remarks=loop-vectorizeremark: <unknown>:0:0: vectorized loop (vectorization width: 4, interleaved count: 2) remark: <unknown>:0:0: vectorized loop (vectorization width: 4, interleaved count: 2)> bin/clang -emit-llvm -m32 -c -O0 1.c -o - | bin/opt -mem2reg -loops -loop-simplify -loop-rotate -loop-vectorize -o /dev/null -pass-remarks=loop-vectorizeremark: <unknown>:0:0: vectorized loop (vectorization width: 4, interleaved count: 2) remark: <unknown>:0:0: vectorized loop (vectorization width: 4, interleaved count: 2)> bin/clang -vclang version 4.0.0 (trunk 278549) (llvm/trunk 278569) Target: x86_64-apple-darwin15.6.0 Thread model: posix> On Jul 7, 2017, at 9:16 AM, Anastasiya Ruzhanskaya via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hello, > > I have a simple loop, > #include <stdio.h> > #define N 200 > > int array[N]; > > int main() { > int result = 0; > int a, b, c; > for (b = 0; b < N; b++) > array[b] = b%3; > > #pragma clang loop vectorize(enable) > for (a = 0; a < N; a++) { > result += array[a]; > } > > return result; > } > > > I compile it like this: > clang -emit-llvm -m32 -c -O0 myarray2.c -o myarray2.s > opt -mem2reg -loops -loop-simplify -loop-rotate -loop-vectorize -S myarray2.s -o opt.s > > and I don't see any effect of vectorization. When I delete m32 flag, vectorization is applied, Why does this happen? > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170707/7e7f827f/attachment-0001.html>