Blame SOURCES/gcc48-pr57896.patch

67287f
2014-02-21  Jakub Jelinek  <jakub@redhat.com>
67287f
67287f
	* config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
67287f
	mode for mask of V8SFmode permutation.
67287f
67287f
2014-02-20  Jakub Jelinek  <jakub@redhat.com>
67287f
67287f
	PR target/57896
67287f
	* config/i386/i386.c (expand_vec_perm_interleave2): Don't call
67287f
	gen_reg_rtx if d->testing_p.
67287f
	(expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
67287f
	expand_vec_perm_broadcast_1): Return early if d->testing_p and
67287f
	we will certainly return true.
67287f
67287f
--- gcc/config/i386/i386.c	(revision 207969)
67287f
+++ gcc/config/i386/i386.c	(revision 207982)
67287f
@@ -20460,7 +20460,7 @@ ix86_expand_vec_perm (rtx operands[])
67287f
 	  return;
67287f
 
67287f
 	case V8SFmode:
67287f
-	  mask = gen_lowpart (V8SFmode, mask);
67287f
+	  mask = gen_lowpart (V8SImode, mask);
67287f
 	  if (one_operand_shuffle)
67287f
 	    emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
67287f
 	  else
67287f
@@ -39405,7 +39405,9 @@ expand_vec_perm_interleave2 (struct expa
67287f
       else
67287f
 	dfinal.perm[i] = e;
67287f
     }
67287f
-  dfinal.op0 = gen_reg_rtx (dfinal.vmode);
67287f
+
67287f
+  if (!d->testing_p)
67287f
+    dfinal.op0 = gen_reg_rtx (dfinal.vmode);
67287f
   dfinal.op1 = dfinal.op0;
67287f
   dfinal.one_operand_p = true;
67287f
   dremap.target = dfinal.op0;
67287f
@@ -39840,6 +39842,9 @@ expand_vec_perm_pshufb2 (struct expand_v
67287f
     return false;
67287f
   gcc_assert (!d->one_operand_p);
67287f
 
67287f
+  if (d->testing_p)
67287f
+    return true;
67287f
+
67287f
   nelt = d->nelt;
67287f
   eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
67287f
 
67287f
@@ -40039,6 +40044,8 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
   switch (d->vmode)
67287f
     {
67287f
     case V4DFmode:
67287f
+      if (d->testing_p)
67287f
+	break;
67287f
       t1 = gen_reg_rtx (V4DFmode);
67287f
       t2 = gen_reg_rtx (V4DFmode);
67287f
 
67287f
@@ -40058,6 +40065,8 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
       {
67287f
 	int mask = odd ? 0xdd : 0x88;
67287f
 
67287f
+	if (d->testing_p)
67287f
+	  break;
67287f
 	t1 = gen_reg_rtx (V8SFmode);
67287f
 	t2 = gen_reg_rtx (V8SFmode);
67287f
 	t3 = gen_reg_rtx (V8SFmode);
67287f
@@ -40099,6 +40108,8 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
 	return expand_vec_perm_pshufb2 (d);
67287f
       else
67287f
 	{
67287f
+	  if (d->testing_p)
67287f
+	    break;
67287f
 	  /* We need 2*log2(N)-1 operations to achieve odd/even
67287f
 	     with interleave. */
67287f
 	  t1 = gen_reg_rtx (V8HImode);
67287f
@@ -40120,6 +40131,8 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
 	return expand_vec_perm_pshufb2 (d);
67287f
       else
67287f
 	{
67287f
+	  if (d->testing_p)
67287f
+	    break;
67287f
 	  t1 = gen_reg_rtx (V16QImode);
67287f
 	  t2 = gen_reg_rtx (V16QImode);
67287f
 	  t3 = gen_reg_rtx (V16QImode);
67287f
@@ -40152,6 +40165,9 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
 	  return expand_vec_perm_even_odd_1 (&d_copy, odd);
67287f
 	}
67287f
 
67287f
+      if (d->testing_p)
67287f
+	break;
67287f
+
67287f
       t1 = gen_reg_rtx (V4DImode);
67287f
       t2 = gen_reg_rtx (V4DImode);
67287f
 
67287f
@@ -40178,6 +40194,9 @@ expand_vec_perm_even_odd_1 (struct expan
67287f
 	  return expand_vec_perm_even_odd_1 (&d_copy, odd);
67287f
 	}
67287f
 
67287f
+      if (d->testing_p)
67287f
+	break;
67287f
+
67287f
       t1 = gen_reg_rtx (V8SImode);
67287f
       t2 = gen_reg_rtx (V8SImode);
67287f
 
67287f
@@ -40270,6 +40289,8 @@ expand_vec_perm_broadcast_1 (struct expa
67287f
     case V16QImode:
67287f
       /* These can be implemented via interleave.  We save one insn by
67287f
 	 stopping once we have promoted to V4SImode and then use pshufd.  */
67287f
+      if (d->testing_p)
67287f
+	return true;
67287f
       do
67287f
 	{
67287f
 	  rtx dest;