On 08/18/2011 11:23 AM, Richard Guenther wrote:
Yeah, well. That's really a question for language lawyers;) I agree that it would be nice to have mask ? val0 : val1 behave "the same" for scalars and vectors. The question is whether for vectors you define it on the bit-level (which makes it equal to (mask& val0) | (~mask& val1)) or on the vector component level. The vector component level is probably what people would expect.Which means we have to treat mask ? val0 : val1 as mask != {0,...} ? val0 : val1.
The definition in OpenCL makes zero sense to me. For byte operands it is custom-tailored after the SSE PMOVMSKB instruction, but there is no PMOVMSKW/PMOVMSKD instruction so you would need very slow bit shift operations before PMOVMSK. On the other hand, bit selection is for example in Altivec.
Do we have some way to contact anyone in the OpenCL standards group (CCing Chris Lattner)?
If you wanted to implement it, it would be mask < {0,...} ? val0 : val1. But really, since we're not implementing OpenCL C I would really prefer to have bit-level selection, and let a front-end implement the quirk.
Paolo
