hameeza ahmed via llvm-dev
2017-Aug-17 16:52 UTC
[llvm-dev] unable to emit vectorized code in LLVM IR
I want to vectorize the user given inputs. when opt does vectorization user supplied inputs (from a text file) will be added using AVX vector instructions. as you pointed; When i changed my code to following: int main(int argc, char** argv) { int a[1000], b[1000], c[1000]; int aa=atoi(argv[1]), bb=atoi(argv[2]); for (int i=0; i<1000; i++) { a[i]=aa, b[i]=bb; c[i]=a[i] + b[i]; printf("sum: %d\n", c[i]); } I am getting error remark: <unknown>:0:0: loop not vectorized: call instruction cannot be vectorized. I am running following commands: clang -S -emit-llvm sum-vec.c -march=knl -O3 -mllvm -disable-llvm-optzns -o sum-vec.ll opt -S -O3 -force-vector-width=64 sum-vec.ll -o sum-vec03.ll How to achieve this? Please help. On Thu, Aug 17, 2017 at 10:44 AM, Nemanja Ivanovic <nemanja.i.ibm at gmail.com> wrote:> I'm not sure what you expect to have vectorized here. If you look at the > emitted code, there's no loop. It's just an add and a multiply as you might > expect when adding a loop-invariant sum 1000 times in a loop. > > On Wed, Aug 16, 2017 at 11:38 PM, hameeza ahmed via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hello, >> I have written the following code. when i try to vectorize it through >> opt. i am not getting vectorized instructions. >> >> #include <stdio.h> >> #include<stdlib.h> >> int main(int argc, char** argv) { >> int sum=0; int a=atoi(argv[1]); int b=atoi(argv[2]); >> for (int i=0;i<1000;i++) >> { >> sum+=a+b; >> } >> >> printf("sum: %d\n", sum); >> return 0; >> } >> i use following commands: >> clang -S -emit-llvm sum-main.c -march=knl -O3 -mllvm >> -disable-llvm-optzns -o sum-main.ll >> opt -S -O3 -force-vector-width=64 sum-main.ll -o sum-main03.ll >> >> why is that so? where am i doing mistake? i am not getting vectorized >> operations rather getting scalar operations. >> >> Please help. >> >> Thank You >> >> Regards >> >> >> _______________________________________________ >> 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/20170817/0be8296b/attachment.html>
Nemanja Ivanovic via llvm-dev
2017-Aug-17 16:57 UTC
[llvm-dev] unable to emit vectorized code in LLVM IR
Move the printf out of the loop and it should vectorize just fine. On Thu, Aug 17, 2017 at 6:52 PM, hameeza ahmed <hahmed2305 at gmail.com> wrote:> I want to vectorize the user given inputs. when opt does vectorization > user supplied inputs (from a text file) will be added using AVX vector > instructions. > > as you pointed; When i changed my code to following: > > int main(int argc, char** argv) { > int a[1000], b[1000], c[1000]; > int aa=atoi(argv[1]), bb=atoi(argv[2]); > for (int i=0; i<1000; i++) { > a[i]=aa, b[i]=bb; > c[i]=a[i] + b[i]; > printf("sum: %d\n", c[i]); > > } > > I am getting error remark: <unknown>:0:0: loop not vectorized: call > instruction cannot be vectorized. > > I am running following commands: > clang -S -emit-llvm sum-vec.c -march=knl -O3 -mllvm -disable-llvm-optzns > -o sum-vec.ll > opt -S -O3 -force-vector-width=64 sum-vec.ll -o sum-vec03.ll > > How to achieve this? Please help. > > > > > > On Thu, Aug 17, 2017 at 10:44 AM, Nemanja Ivanovic < > nemanja.i.ibm at gmail.com> wrote: > >> I'm not sure what you expect to have vectorized here. If you look at the >> emitted code, there's no loop. It's just an add and a multiply as you might >> expect when adding a loop-invariant sum 1000 times in a loop. >> >> On Wed, Aug 16, 2017 at 11:38 PM, hameeza ahmed via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> Hello, >>> I have written the following code. when i try to vectorize it through >>> opt. i am not getting vectorized instructions. >>> >>> #include <stdio.h> >>> #include<stdlib.h> >>> int main(int argc, char** argv) { >>> int sum=0; int a=atoi(argv[1]); int b=atoi(argv[2]); >>> for (int i=0;i<1000;i++) >>> { >>> sum+=a+b; >>> } >>> >>> printf("sum: %d\n", sum); >>> return 0; >>> } >>> i use following commands: >>> clang -S -emit-llvm sum-main.c -march=knl -O3 -mllvm >>> -disable-llvm-optzns -o sum-main.ll >>> opt -S -O3 -force-vector-width=64 sum-main.ll -o sum-main03.ll >>> >>> why is that so? where am i doing mistake? i am not getting vectorized >>> operations rather getting scalar operations. >>> >>> Please help. >>> >>> Thank You >>> >>> Regards >>> >>> >>> _______________________________________________ >>> 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/20170817/fa8438c2/attachment.html>
Francois Fayard via llvm-dev
2017-Aug-17 16:58 UTC
[llvm-dev] unable to emit vectorized code in LLVM IR
> int main(int argc, char** argv) { > int a[1000], b[1000], c[1000]; > int aa=atoi(argv[1]), bb=atoi(argv[2]); > for (int i=0; i<1000; i++) { > a[i]=aa, b[i]=bb; > c[i]=a[i] + b[i]; > printf("sum: %d\n", c[i]); > }Move away the std::printf from the loop. It makes it sequential. int a[1000], b[1000], c[1000]; int aa = atoi(argv[1]); int bb = atoi(argv[2]); for (int i=0; i<1000; i++) { a[i] = aa; b[i] = bb; c[i] = aa + bb; } François -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170817/bd66b4d5/attachment.html>
hameeza ahmed via llvm-dev
2017-Aug-17 17:01 UTC
[llvm-dev] unable to emit vectorized code in LLVM IR
i removed printf from loop. Now getting no error. but the IR doesnot contain vectorized code. IR Output is as follows: ; ModuleID = 'sum-vec.ll' source_filename = "sum-vec.c" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; Function Attrs: norecurse nounwind readnone uwtable define i32 @main(i32, i8** nocapture readnone) local_unnamed_addr #0 { ret i32 0 } attributes #0 = { norecurse nounwind readnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="knl" "target-features"="+adx,+aes,+avx,+avx2,+avx512cd,+avx512er,+avx512f,+avx512pf,+bmi,+bmi2,+cx16,+f16c,+fma,+fsgsbase,+fxsr,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prefetchwt1,+rdrnd,+rdseed,+rtm,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.ident = !{!0} !0 = !{!"clang version 4.0.0 (tags/RELEASE_400/final)"} what to do? please help. On Thu, Aug 17, 2017 at 9:57 PM, Nemanja Ivanovic <nemanja.i.ibm at gmail.com> wrote:> Move the printf out of the loop and it should vectorize just fine. > > On Thu, Aug 17, 2017 at 6:52 PM, hameeza ahmed <hahmed2305 at gmail.com> > wrote: > >> I want to vectorize the user given inputs. when opt does vectorization >> user supplied inputs (from a text file) will be added using AVX vector >> instructions. >> >> as you pointed; When i changed my code to following: >> >> int main(int argc, char** argv) { >> int a[1000], b[1000], c[1000]; >> int aa=atoi(argv[1]), bb=atoi(argv[2]); >> for (int i=0; i<1000; i++) { >> a[i]=aa, b[i]=bb; >> c[i]=a[i] + b[i]; >> printf("sum: %d\n", c[i]); >> >> } >> >> I am getting error remark: <unknown>:0:0: loop not vectorized: call >> instruction cannot be vectorized. >> >> I am running following commands: >> clang -S -emit-llvm sum-vec.c -march=knl -O3 -mllvm -disable-llvm-optzns >> -o sum-vec.ll >> opt -S -O3 -force-vector-width=64 sum-vec.ll -o sum-vec03.ll >> >> How to achieve this? Please help. >> >> >> >> >> >> On Thu, Aug 17, 2017 at 10:44 AM, Nemanja Ivanovic < >> nemanja.i.ibm at gmail.com> wrote: >> >>> I'm not sure what you expect to have vectorized here. If you look at the >>> emitted code, there's no loop. It's just an add and a multiply as you might >>> expect when adding a loop-invariant sum 1000 times in a loop. >>> >>> On Wed, Aug 16, 2017 at 11:38 PM, hameeza ahmed via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> Hello, >>>> I have written the following code. when i try to vectorize it through >>>> opt. i am not getting vectorized instructions. >>>> >>>> #include <stdio.h> >>>> #include<stdlib.h> >>>> int main(int argc, char** argv) { >>>> int sum=0; int a=atoi(argv[1]); int b=atoi(argv[2]); >>>> for (int i=0;i<1000;i++) >>>> { >>>> sum+=a+b; >>>> } >>>> >>>> printf("sum: %d\n", sum); >>>> return 0; >>>> } >>>> i use following commands: >>>> clang -S -emit-llvm sum-main.c -march=knl -O3 -mllvm >>>> -disable-llvm-optzns -o sum-main.ll >>>> opt -S -O3 -force-vector-width=64 sum-main.ll -o sum-main03.ll >>>> >>>> why is that so? where am i doing mistake? i am not getting vectorized >>>> operations rather getting scalar operations. >>>> >>>> Please help. >>>> >>>> Thank You >>>> >>>> Regards >>>> >>>> >>>> _______________________________________________ >>>> 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/20170817/4a2b187f/attachment.html>