[llvm-dev] How to insert vector type input parameter for function in C/C++ API?

Michael Choi via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 7 18:16:32 PDT 2017


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>


More information about the llvm-dev mailing list