[LLVMdev] Load value and broadcast in LLVM
Shahid, Asghar-ahmad
Asghar-ahmad.Shahid at amd.com
Mon May 4 02:12:31 PDT 2015
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/d337a813/attachment.html>
More information about the llvm-dev
mailing list