Michael Choi via llvm-dev
2017-Apr-08 01:01 UTC
[llvm-dev] How to insert vector type input parameter for function in C/C++ API?
Thank you so much Craig! I tried it. But still complaining. Here is the error message during compilation. HowToUseJIT_SIMD_FuncProto.cpp:94:55: error: expected unqualified-id VectorType::(Type::getInt32Ty(Context),4), THIS IS MY CODE: LLVMContext Context; std::unique_ptr<Module> Owner = make_unique<Module>("test", Context); Module *M = Owner.get(); Function *Add1F cast<Function>(M->getOrInsertFunction("add1", VectorType::(Type::getInt32Ty(Context),4), VectorType::(Type::getInt32Ty(Context),4), //Type::getInt32Ty(Context), //This is working fine //Type::getInt32Ty(Context), //This is working fine nullptr)); Any idea? Please let me know what is wrong in my code. Thanks, Michael On Fri, Apr 7, 2017 at 5:36 PM, Craig Topper <craig.topper at gmail.com> wrote:> To create a vector type you can call VectorType::get(<scalar element > type>, <num of elements>) and pass the output of that to the Type argument > when creating instructions. To get the scalar element type you can use the > get*Ty methods in IRBuilder or the Type::get*Ty methods. > > ~Craig > > On Fri, Apr 7, 2017 at 5:20 PM, Michael Choi via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> I am working on AVX2 code generation by LLVM framework. >> >> I want to generate LLVM-IR code for the following code by C/C++ API from >> LLVM framework. I am using LLVM3.8. >> Basically, I want to generate TARGET (Refer to below) LLVM-IR code for >> SOURCE function by C/C++ API. >> As you see below, the AVX2 data type is __m256i which is vector type. How >> can I indicate vector type (function return type, input parameters) for >> IRBuiler by C/C++ APIs? >> >> I don't see any example online and please let me know if anybody has >> examples. >> >> >> >> SOURCE: >> #include "immintrin.h" >> __m256i sum(__m256i a, __m256i b) { >> return a+b; >> } >> >> TARGET: >> michael at michael-Precision-Tower-3420:~/Year_2017/work_DEMO$ cat >> avx2_add2.ll >> ; ModuleID = 'avx2_add2.c' >> target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" >> target triple = "x86_64-unknown-windows-cygnus" >> >> ; Function Attrs: nounwind >> define <4 x i64> @sum(<4 x i64> %a, <4 x i64> %b) #0 { >> %1 = alloca <4 x i64>, align 32 >> %2 = alloca <4 x i64>, align 32 >> store <4 x i64> %a, <4 x i64>* %1, align 32 >> store <4 x i64> %b, <4 x i64>* %2, align 32 >> %3 = load <4 x i64>, <4 x i64>* %1, align 32 >> %4 = load <4 x i64>, <4 x i64>* %2, align 32 >> %5 = add <4 x i64> %3, %4 >> ret <4 x i64> %5 >> } >> >> attributes #0 = { nounwind "disable-tail-calls"="false" >> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" >> "no-infs-fp-math"="false" "no-nans-fp-math"="false" >> "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2" >> "unsafe-fp-math"="false" "use-soft-float"="false" } >> >> !llvm.ident = !{!0} >> >> !0 = !{!"clang version 3.8.1 (tags/RELEASE_381/final)"} >> >> Thanks, >> Michael >> >> _______________________________________________ >> 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/20170407/f6e0eacd/attachment-0001.html>
Craig Topper via llvm-dev
2017-Apr-08 01:05 UTC
[llvm-dev] How to insert vector type input parameter for function in C/C++ API?
It should be VectorType::get(Type::getInt32Ty(Context),4). You need the word "get" after VectorType:: ~Craig On Fri, Apr 7, 2017 at 6:01 PM, Michael Choi <choimichael103 at gmail.com> wrote:> Thank you so much Craig! > > I tried it. But still complaining. Here is the error message during > compilation. > > HowToUseJIT_SIMD_FuncProto.cpp:94:55: error: expected unqualified-id > VectorType::(Type::getInt32Ty( > Context),4), > > > > THIS IS MY CODE: > LLVMContext Context; > > std::unique_ptr<Module> Owner = make_unique<Module>("test", Context); > Module *M = Owner.get(); > > Function *Add1F > cast<Function>(M->getOrInsertFunction("add1", > VectorType::(Type::getInt32Ty( > Context),4), > VectorType::(Type::getInt32Ty( > Context),4), > > //Type::getInt32Ty(Context), > //This is working fine > //Type::getInt32Ty(Context), > //This is working fine > > nullptr)); > > > Any idea? > Please let me know what is wrong in my code. > > Thanks, > Michael > > On Fri, Apr 7, 2017 at 5:36 PM, Craig Topper <craig.topper at gmail.com> > wrote: > >> To create a vector type you can call VectorType::get(<scalar element >> type>, <num of elements>) and pass the output of that to the Type argument >> when creating instructions. To get the scalar element type you can use the >> get*Ty methods in IRBuilder or the Type::get*Ty methods. >> >> ~Craig >> >> On Fri, Apr 7, 2017 at 5:20 PM, Michael Choi via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> I am working on AVX2 code generation by LLVM framework. >>> >>> I want to generate LLVM-IR code for the following code by C/C++ API from >>> LLVM framework. I am using LLVM3.8. >>> Basically, I want to generate TARGET (Refer to below) LLVM-IR code for >>> SOURCE function by C/C++ API. >>> As you see below, the AVX2 data type is __m256i which is vector type. >>> How can I indicate vector type (function return type, input parameters) for >>> IRBuiler by C/C++ APIs? >>> >>> I don't see any example online and please let me know if anybody has >>> examples. >>> >>> >>> >>> SOURCE: >>> #include "immintrin.h" >>> __m256i sum(__m256i a, __m256i b) { >>> return a+b; >>> } >>> >>> TARGET: >>> michael at michael-Precision-Tower-3420:~/Year_2017/work_DEMO$ cat >>> avx2_add2.ll >>> ; ModuleID = 'avx2_add2.c' >>> target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" >>> target triple = "x86_64-unknown-windows-cygnus" >>> >>> ; Function Attrs: nounwind >>> define <4 x i64> @sum(<4 x i64> %a, <4 x i64> %b) #0 { >>> %1 = alloca <4 x i64>, align 32 >>> %2 = alloca <4 x i64>, align 32 >>> store <4 x i64> %a, <4 x i64>* %1, align 32 >>> store <4 x i64> %b, <4 x i64>* %2, align 32 >>> %3 = load <4 x i64>, <4 x i64>* %1, align 32 >>> %4 = load <4 x i64>, <4 x i64>* %2, align 32 >>> %5 = add <4 x i64> %3, %4 >>> ret <4 x i64> %5 >>> } >>> >>> attributes #0 = { nounwind "disable-tail-calls"="false" >>> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" >>> "no-infs-fp-math"="false" "no-nans-fp-math"="false" >>> "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2" >>> "unsafe-fp-math"="false" "use-soft-float"="false" } >>> >>> !llvm.ident = !{!0} >>> >>> !0 = !{!"clang version 3.8.1 (tags/RELEASE_381/final)"} >>> >>> Thanks, >>> Michael >>> >>> _______________________________________________ >>> 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/20170407/151faf79/attachment.html>
Michael Choi via llvm-dev
2017-Apr-08 01:16 UTC
[llvm-dev] How to insert vector type input parameter for function in C/C++ API?
Fantastic! It's working! Thank you so much Craig!!! On Fri, Apr 7, 2017 at 6:05 PM, Craig Topper <craig.topper at gmail.com> wrote:> It should be VectorType::get(Type::getInt32Ty(Context),4). You need the > word "get" after VectorType:: > > ~Craig > > On Fri, Apr 7, 2017 at 6:01 PM, Michael Choi <choimichael103 at gmail.com> > wrote: > >> Thank you so much Craig! >> >> I tried it. But still complaining. Here is the error message during >> compilation. >> >> HowToUseJIT_SIMD_FuncProto.cpp:94:55: error: expected unqualified-id >> VectorType::(Type::getInt32Ty( >> Context),4), >> >> >> >> THIS IS MY CODE: >> LLVMContext Context; >> >> std::unique_ptr<Module> Owner = make_unique<Module>("test", Context); >> Module *M = Owner.get(); >> >> Function *Add1F >> cast<Function>(M->getOrInsertFunction("add1", >> VectorType::(Type::getInt32Ty( >> Context),4), >> VectorType::(Type::getInt32Ty( >> Context),4), >> >> //Type::getInt32Ty(Context), >> //This is working fine >> //Type::getInt32Ty(Context), >> //This is working fine >> >> nullptr)); >> >> >> Any idea? >> Please let me know what is wrong in my code. >> >> Thanks, >> Michael >> >> On Fri, Apr 7, 2017 at 5:36 PM, Craig Topper <craig.topper at gmail.com> >> wrote: >> >>> To create a vector type you can call VectorType::get(<scalar element >>> type>, <num of elements>) and pass the output of that to the Type argument >>> when creating instructions. To get the scalar element type you can use the >>> get*Ty methods in IRBuilder or the Type::get*Ty methods. >>> >>> ~Craig >>> >>> On Fri, Apr 7, 2017 at 5:20 PM, Michael Choi via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> I am working on AVX2 code generation by LLVM framework. >>>> >>>> I want to generate LLVM-IR code for the following code by C/C++ API >>>> from LLVM framework. I am using LLVM3.8. >>>> Basically, I want to generate TARGET (Refer to below) LLVM-IR code for >>>> SOURCE function by C/C++ API. >>>> As you see below, the AVX2 data type is __m256i which is vector type. >>>> How can I indicate vector type (function return type, input parameters) for >>>> IRBuiler by C/C++ APIs? >>>> >>>> I don't see any example online and please let me know if anybody has >>>> examples. >>>> >>>> >>>> >>>> SOURCE: >>>> #include "immintrin.h" >>>> __m256i sum(__m256i a, __m256i b) { >>>> return a+b; >>>> } >>>> >>>> TARGET: >>>> michael at michael-Precision-Tower-3420:~/Year_2017/work_DEMO$ cat >>>> avx2_add2.ll >>>> ; ModuleID = 'avx2_add2.c' >>>> target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" >>>> target triple = "x86_64-unknown-windows-cygnus" >>>> >>>> ; Function Attrs: nounwind >>>> define <4 x i64> @sum(<4 x i64> %a, <4 x i64> %b) #0 { >>>> %1 = alloca <4 x i64>, align 32 >>>> %2 = alloca <4 x i64>, align 32 >>>> store <4 x i64> %a, <4 x i64>* %1, align 32 >>>> store <4 x i64> %b, <4 x i64>* %2, align 32 >>>> %3 = load <4 x i64>, <4 x i64>* %1, align 32 >>>> %4 = load <4 x i64>, <4 x i64>* %2, align 32 >>>> %5 = add <4 x i64> %3, %4 >>>> ret <4 x i64> %5 >>>> } >>>> >>>> attributes #0 = { nounwind "disable-tail-calls"="false" >>>> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" >>>> "no-infs-fp-math"="false" "no-nans-fp-math"="false" >>>> "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2" >>>> "unsafe-fp-math"="false" "use-soft-float"="false" } >>>> >>>> !llvm.ident = !{!0} >>>> >>>> !0 = !{!"clang version 3.8.1 (tags/RELEASE_381/final)"} >>>> >>>> Thanks, >>>> Michael >>>> >>>> _______________________________________________ >>>> 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/20170407/a3a48e5e/attachment.html>