backport: re PR target/57896 (ICE in expand_expr_real_2)
Backport from mainline 2014-02-21 Jakub Jelinek <jakub@redhat.com> * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode mode for mask of V8SFmode permutation. Backport from 4.8 branch 2014-02-20 Jakub Jelinek <jakub@redhat.com> PR target/57896 * config/i386/i386.c (expand_vec_perm_interleave2): Don't call gen_reg_rtx if d->testing_p. (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1, expand_vec_perm_broadcast_1): Return early if d->testing_p and we will certainly return true. From-SVN: r207983
This commit is contained in:
parent
9408044418
commit
4a70f4d7e2
|
@ -1,3 +1,21 @@
|
|||
2014-02-21 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
Backport from mainline
|
||||
2014-02-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
|
||||
mode for mask of V8SFmode permutation.
|
||||
|
||||
Backport from 4.8 branch
|
||||
2014-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/57896
|
||||
* config/i386/i386.c (expand_vec_perm_interleave2): Don't call
|
||||
gen_reg_rtx if d->testing_p.
|
||||
(expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
|
||||
expand_vec_perm_broadcast_1): Return early if d->testing_p and
|
||||
we will certainly return true.
|
||||
|
||||
2014-02-20 Terry Guo <terry.guo@arm.com>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -20073,7 +20073,7 @@ ix86_expand_vec_perm (rtx operands[])
|
|||
return;
|
||||
|
||||
case V8SFmode:
|
||||
mask = gen_lowpart (V8SFmode, mask);
|
||||
mask = gen_lowpart (V8SImode, mask);
|
||||
if (one_operand_shuffle)
|
||||
emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
|
||||
else
|
||||
|
@ -36655,7 +36655,9 @@ expand_vec_perm_interleave2 (struct expand_vec_perm_d *d)
|
|||
else
|
||||
dfinal.perm[i] = e;
|
||||
}
|
||||
dfinal.op0 = gen_reg_rtx (dfinal.vmode);
|
||||
|
||||
if (!d->testing_p)
|
||||
dfinal.op0 = gen_reg_rtx (dfinal.vmode);
|
||||
dfinal.op1 = dfinal.op0;
|
||||
dremap.target = dfinal.op0;
|
||||
|
||||
|
@ -37052,6 +37054,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
switch (d->vmode)
|
||||
{
|
||||
case V4DFmode:
|
||||
if (d->testing_p)
|
||||
break;
|
||||
t1 = gen_reg_rtx (V4DFmode);
|
||||
t2 = gen_reg_rtx (V4DFmode);
|
||||
|
||||
|
@ -37071,6 +37075,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
{
|
||||
int mask = odd ? 0xdd : 0x88;
|
||||
|
||||
if (d->testing_p)
|
||||
break;
|
||||
t1 = gen_reg_rtx (V8SFmode);
|
||||
t2 = gen_reg_rtx (V8SFmode);
|
||||
t3 = gen_reg_rtx (V8SFmode);
|
||||
|
@ -37112,6 +37118,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
return expand_vec_perm_pshufb2 (d);
|
||||
else
|
||||
{
|
||||
if (d->testing_p)
|
||||
break;
|
||||
/* We need 2*log2(N)-1 operations to achieve odd/even
|
||||
with interleave. */
|
||||
t1 = gen_reg_rtx (V8HImode);
|
||||
|
@ -37133,6 +37141,8 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
return expand_vec_perm_pshufb2 (d);
|
||||
else
|
||||
{
|
||||
if (d->testing_p)
|
||||
break;
|
||||
t1 = gen_reg_rtx (V16QImode);
|
||||
t2 = gen_reg_rtx (V16QImode);
|
||||
t3 = gen_reg_rtx (V16QImode);
|
||||
|
@ -37165,6 +37175,9 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
return expand_vec_perm_even_odd_1 (&d_copy, odd);
|
||||
}
|
||||
|
||||
if (d->testing_p)
|
||||
break;
|
||||
|
||||
t1 = gen_reg_rtx (V4DImode);
|
||||
t2 = gen_reg_rtx (V4DImode);
|
||||
|
||||
|
@ -37191,6 +37204,9 @@ expand_vec_perm_even_odd_1 (struct expand_vec_perm_d *d, unsigned odd)
|
|||
return expand_vec_perm_even_odd_1 (&d_copy, odd);
|
||||
}
|
||||
|
||||
if (d->testing_p)
|
||||
break;
|
||||
|
||||
t1 = gen_reg_rtx (V8SImode);
|
||||
t2 = gen_reg_rtx (V8SImode);
|
||||
|
||||
|
@ -37283,6 +37299,8 @@ expand_vec_perm_broadcast_1 (struct expand_vec_perm_d *d)
|
|||
case V16QImode:
|
||||
/* These can be implemented via interleave. We save one insn by
|
||||
stopping once we have promoted to V4SImode and then use pshufd. */
|
||||
if (d->testing_p)
|
||||
return true;
|
||||
do
|
||||
{
|
||||
rtx dest;
|
||||
|
|
Loading…
Reference in New Issue