Hi! On Thu, Mar 19, 2020 at 09:18:06AM +0100, Richard Biener wrote: > On Wed, Mar 18, 2020 at 8:34 PM Segher Boessenkool > <seg...@kernel.crashing.org> wrote: > > We don't have ops on short integer types, either, for similar reasons. > > How do you represent two vector input shuffles? The usual > way is (vec_select (vec_concat ...))) which requires a _larger_ > vector mode for the concat. Which you don't have ops on either.
Yes, we have double length modes for this, and it is painful as well. And we also have a few half-length modes. >From rs6000-modes.def: /* VMX/VSX. */ VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */ VECTOR_MODE (INT, TI, 1); /* V1TI */ VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */ /* Two VMX/VSX vectors (for permute, select, concat, etc.) */ VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */ VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */ /* Half VMX/VSX vector (for internal use) */ VECTOR_MODE (FLOAT, SF, 2); /* V2SF */ VECTOR_MODE (INT, SI, 2); /* V2SI */ > It's also not different to those large integer modes you need > but do not have ops on. > > So I think the argument is somewhat moot, but yes. The point is that as soon as you allow some computations in any mode, it snowballs to having to support all computations in those modes, but even more importantly having to do it in movM as well. Not good. Segher