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

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 7 17:36:05 PDT 2017


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/e1744335/attachment.html>


More information about the llvm-dev mailing list