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

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


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 Owner = make_unique("test", Context); Module *M = Owner.get();

Function *Add1F = cast(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(, ) and pass the output of that to the Type argument when creating instructions. To get the scalar element type you can use the getTy methods in IRBuilder or the Type::getTy 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:~/Year2017/workDEMO$ cat avx2add2.ll ; ModuleID = 'avx2add2.c' target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target triple = "x8664-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/RELEASE381/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>



More information about the llvm-dev mailing list