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>