[LLVMdev] Load value and broadcast in LLVM

zhi chen zchenhn at gmail.com
Mon May 4 10:01:32 PDT 2015


Hi Shahid,

Thank you so much for your response. You suggested approach is what I am
right now using. However, it seems that the overhead is a little bit high
because we are introducing two more instructions. I was wondering if there
was a cheaper way to do it.

Best,
Zhi

On Mon, May 4, 2015 at 2:12 AM, Shahid, Asghar-ahmad <
Asghar-ahmad.Shahid at amd.com> wrote:

>  Hi Zhi,
>
>
>
> If I get your question correctly, Yes, you can do it by using the
> IRBuilder’s CreateVectorSplat() API.
>
>
>
>   /// \brief Return a vector value that contains \arg V broadcasted to \p
>
>   /// NumElts elements.
>
>   Value *CreateVectorSplat(unsigned NumElts, Value *V, const Twine &Name =
> "")
>
>
>
> For your case, here the Value V will be your loaded value %0 and NumElts
> will be 2.
>
>
>
> So after %0 = load double* %x, align 4, !tbaa !0
>
> you will get a sequence of LLVM-IR
>
>
>
> %1= insertelement <2 x double > %0, …
>
> %2= shufflevector <2 x double > %1, …
>
>
>
> %2 will be your desired  value.
>
>
>
> Regards,
>
> Shahid
>
>
>
> *From:* llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] *On
> Behalf Of *zhi chen
> *Sent:* Monday, May 04, 2015 1:29 PM
> *To:* LLVM Dev
> *Subject:* [LLVMdev] Load value and broadcast in LLVM
>
>
>
> Is it possible to load a value into a vector register and broadcast it in
> LLVM?
>
>
>
> For example, for the following address %x
>
>
>
>  %x = getelementptr inbounds %struct._Ray* %ray, i32 0, i32 0, i32 0
>
>
>
> instead of loading the value at %x into a scalar register %0:
>
> %0 = load double* %x, align 4, !tbaa !0
>
>
>
> I want to load it into a <2 x double> vector register %1 and make both of
> the two elements in %1 be the value at %x.
>
>
>
> I guess one way to do this is to make getelementptr return a <2 x i32>*
> address, where the two addresses in <2 X 32> are the same. But I don't know
> if it is possible to do this in LLVM.
>
>
>
> Any help would be appreciated.
>
>
>
> Best,
>
> Zhi
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150504/0985eb84/attachment.html>


More information about the llvm-dev mailing list