[llvm-dev] [RFC] Vector Predication
David Greene via llvm-dev
llvm-dev at lists.llvm.org
Thu Jan 31 11:03:48 PST 2019
Philip Reames <listmail at philipreames.com> writes:
> Question 1 - Why do we need separate mask and lengths? Can't the
> length be easily folded into the mask operand?
> e.g. newmask = (<4 x i1>)((i4)%y & (1 << %L -1))
> and then pattern matched in the backend if needed
I'm a little concerned about how difficult it will be to maintain enough
information throughout compilation to be able to match this on a machine
with an explicit vector length value.
> Question 2 - Have you explored using selects instead? What practical
> problems do you run into which make you believe explicit predication
> is required?
> e.g. %sub = fsub <4 x float> %x, %y
> %result = select <4 x i1> %M, <4 x float> %sub, undef
That is semantically incorrect. According to IR semantics, the fsub is
fully evaluated before the select comes along. It could trap for
elements where %M is 0, whereas a masked intrinsic conveys the proper
semantics of masking traps for masked-out elements. We need intrinsics
and eventually (IMHO) fully first-class predication to make this work
> My context for these questions is that my experience recently w/o
> existing masked intrinsics shows us missing fairly basic
> optimizations, precisely because they weren't able to reuse all of the
> existing infrastructure. (I've been working on
> SimplifyDemandedVectorElts recently for exactly this reason.) My
> concern is that your EVL proposal will end up in the same state.
I think that's just the nature of the beast. We need IR-level support
for masking and we have to teach LLVM about it.
More information about the llvm-dev