[LLVMdev] Adding masked vector load and store intrinsics
Smith, Kevin B
kevin.b.smith at intel.com
Fri Oct 24 10:58:47 PDT 2014
> So %passthrough can *only* be undef or zeroinitializer?
No, that wasn't the intent. %passthrough can be any other definition that is needed. Zero and undef were simply two possible values that illustrated some interesting behavior.
Mapping of the %passthrough to the actual semantics of many vector instruction sets where the masked instructions leave the masked-off elements of the destination unchanged
is done in a similar manner as three-address instructions are turned into two address instructions, by placing a copy as necessary so that dest and passthrough are in the same register.
Kevin B. Smith
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of dag at cray.com
Sent: Friday, October 24, 2014 10:21 AM
To: Demikhovsky, Elena
Cc: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] Adding masked vector load and store intrinsics
"Demikhovsky, Elena" <elena.demikhovsky at intel.com> writes:
> %data = call <8 x i32> @llvm.masked.load (i32* %addr, <8 x i32>
> %passthru, i32 4, <8 x i1> %mask)
> where %passthru is used to fill the elements of %data that are
> masked-off (if any; can be zeroinitializer or undef).
So %passthrough can *only* be undef or zeroinitializer? If that's the
case it might make more sense to have two intrinsics, one that fills
with undef and one that fills with zero. Using a general vector operand
with a restriction on valid values seems odd and potentially misleading.
Another option is to always fill with undef and require a select on top
of the load to fill with zero. The load + select would be easily
matchable to a target instruction.
I'm trying to think beyond just AVX-512 to what other future
architectures might want. It's not a given that future architectures
will fill with zero *or* undef though those are the two most likely fill
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev