On 04/28/2014 09:48 AM, Evgeny Stupachenko wrote:
> - /* Even with AVX, palignr only operates on 128-bit vectors. */
> - if (!TARGET_SSSE3 || GET_MODE_SIZE (d->vmode) != 16)
> + /* PALIGNR of 2 256-bits registers on AVX2 costs only 2 instructions:
> + PERM and PALIGNR. It is more profitable than 2 PSHUFB and PERM.
> + PALIGNR of 2 128-bits registers takes only 1 instrucion. */
> + if (!TARGET_SSSE3 || (GET_MODE_SIZE (d->vmode) != 16 &&
> + GET_MODE_SIZE (d->vmode) != 32))
> + return false;
> + /* Only AVX2 or higher support PALIGNR on 256-bits registers. */
> + if (!TARGET_AVX2 && (GET_MODE_SIZE (d->vmode) == 32))
> return false;
This is confusingly written.
How about
if (GET_MODE_SIZE (d->vmode) == 16)
{
if (!TARGET_SSSE3)
return false;
}
else if (GET_MODE_SIZE (d->vmode) == 32)
{
if (!TARGET_AVX2)
return false;
}
else
return false;
With the comments added into the right places.
r~