i386: Improve variable permutation insn avoidance [PR101021]

Emit constant permutation insn directly from expand_vec_perm_shufb.

2021-06-13  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/101021
	* config/i386/i386-expand.c (expand_vec_perm_pshufb):
	Emit constant permutation insn directly from here.
This commit is contained in:
Uros Bizjak 2021-06-13 21:50:51 +02:00
parent 291cd193f8
commit 681143b9b9

View file

@ -17593,13 +17593,16 @@ expand_vec_perm_pshufb (struct expand_vec_perm_d *d)
return false;
}
/* Try to avoid variable permutation instruction. */
if (canonicalize_vector_int_perm (d, &nd) && expand_vec_perm_1 (&nd))
return false;
if (d->testing_p)
return true;
/* Try to avoid variable permutation instruction. */
if (canonicalize_vector_int_perm (d, &nd) && expand_vec_perm_1 (&nd))
{
emit_move_insn (d->target, gen_lowpart (d->vmode, nd.target));
return true;
}
if (vmode == V8SImode)
for (i = 0; i < 8; ++i)
rperm[i] = GEN_INT ((d->perm[i * nelt / 8] * 8 / nelt) & 7);