[LLVMdev] Load value and broadcast in LLVM

Kuperstein, Michael M michael.m.kuperstein at intel.com
Mon May 4 01:15:41 PDT 2015

The canonical way to do it would be to load into a scalar, and then broadcast the scalar using a shufflevector.
Hopefully, the backend will be smart enough to match this as a single load+broadcast, if the platform has such an instruction.

(The trick you’re suggesting with getelementptr will probably possible soon, now that gather intrinsics are being introduced, but it probably will create worse code, not better.)


From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of zhi chen
Sent: Monday, May 04, 2015 10:59
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.


Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150504/876a948f/attachment.html>

More information about the llvm-dev mailing list