This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC-3.3.6 release status


On 20 Jan 2005, Gabriel Dos Reis wrote:
>   There are currently 29 open PRs targetted for 3.3.6.  Among which,
> two are critical: rtl-optimization/15853 and target/18402.

Many thanks to Jakub (and Ralf) for fixing the latter.

The following patch has been tested against the gcc-3_3-branch on
i686-pc-linux-gnu with a full "make bootstrap", all default languages
except Ada, and regression tested with a top-level "make -k check"
with no new failures.  I've reconfirmed that backporting this patch
resolves the failure in PR target/18402.

Ok for the gcc-3_3-branch?



2005-01-22  Roger Sayle  <roger@eyesopen.com>

	PR target/18402
	Backport from mainline
	2003-02-05  Jakub Jelinek  <jakub@redhat.com>

 	PR optimization/8555
 	* config/i386/i386.md (sse_mov?fcc split): Handle op2 == op3 case
 	instead of aborting.

	* gcc.dg/20030204-1.c: New test.


Index: i386.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.md,v
retrieving revision 1.404.2.28
diff -c -3 -p -r1.404.2.28 i386.md
*** i386.md	16 Dec 2004 09:31:17 -0000	1.404.2.28
--- i386.md	23 Jan 2005 00:51:03 -0000
***************
*** 16686,16695 ****
     (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0)
  					    (subreg:TI (match_dup 7) 0)))]
  {
!   /* If op2 == op3, op3 will be clobbered before it is used.
!      This should be optimized out though.  */
    if (operands_match_p (operands[2], operands[3]))
!     abort ();
    PUT_MODE (operands[1], GET_MODE (operands[0]));
    if (operands_match_p (operands[0], operands[4]))
      operands[6] = operands[4], operands[7] = operands[2];
--- 16686,16697 ----
     (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0)
  					    (subreg:TI (match_dup 7) 0)))]
  {
!   /* If op2 == op3, op3 would be clobbered before it is used.  */
    if (operands_match_p (operands[2], operands[3]))
!     {
!       emit_move_insn (operands[0], operands[2]);
!       DONE;
!     }
    PUT_MODE (operands[1], GET_MODE (operands[0]));
    if (operands_match_p (operands[0], operands[4]))
      operands[6] = operands[4], operands[7] = operands[2];


/* PR optimization/8555 */
/* { dg-do compile } */
/* { dg-options "-O -ffast-math -funroll-loops" } */
/* { dg-options "-march=pentium3 -O -ffast-math -funroll-loops" { target i?86-*-* } } */

float foo (float *a, int i)
{
  int j;
  float x = a[j = i - 1], y;

  for (j = i; --j >= 0; )
    if ((y = a[j]) > x)
      x = y;

  return x;
}

Roger
--


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]