[llvm-dev] load instruction to gather intrinsics

zhi chen via llvm-dev llvm-dev at lists.llvm.org
Fri May 5 16:41:05 PDT 2017


The frontend would generate the load in the IR. I am using IRBuilder to
generate gather. I know it is mainly for discontinuous memory locations.
It's a long story why I want to use this. I want to gather some memory
locations. Suppose there are an array A, I manually duplicated it somewhere
with an offset x. Now, we have two arrays A and A', where A'[i] - A[i] =
offset. I want to gather the two values at A+i and A+i whenever there was a
load instruction to get a value from A+i.

It is easy to do this if the code was not vectorized, but it become tricky
when they are vectorized. If there is a load %1 = load <2 x i64>* %Ai,
align 8, which loads two consecutive values at Ai, I need to gather the
values from A'i as well. So I think I need to use gather to get values from
A+i, A+i+1, A'+i, A'+i+1.

On Fri, May 5, 2017 at 4:10 PM, 陳韋任 <chenwj.cs97g at g2.nctu.edu.tw> wrote:

>
>
> 2017-05-06 5:42 GMT+08:00 zhi chen via llvm-dev <llvm-dev at lists.llvm.org>:
>
>> Hi All,
>>
>> Can I change a vector load to gather intrinsic? If so, how can I do it?
>> For example, I want to change the following IR code
>>
>> %1 = load <2 x i64>* %arrayidx1, align 8
>>
>> to
>>
>> %1 = call <2 x i64> @llvm.masked.gather.v2i64(<2 x i64*> %arrayidx1, i32 8, <2 x i1> <i1 true, i1 true>, <2 x i64> undef)
>>
>>
> ​How those IR would be generated? By frontend or your IRBuilder?​ And why
> you want to use gather intrinsic? From the LangRef [1], seems it is mainly
> for discontinuous memory locations.
>
>
>
>> Basically, I am not sure how to get two consecutive addresses started
>> from arrayidx1. Thanks for your time and help in advance.
>>
>
> ​Maybe `getelementptr` is what you need to calculate consecutive
> addresses.
>
> ​[1] http://llvm.org/docs/LangRef.html#llvm-masked-gather-intrinsics​
>
> ​HTH,
> chenwj​
>
> --
> Wei-Ren Chen (陳韋任)
> Homepage: https://people.cs.nctu.edu.tw/~chenwj
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170505/522e9413/attachment.html>


More information about the llvm-dev mailing list