Blame SOURCES/gcc32-ppc-movdi_internal64.patch

6f1b0c
2004-07-25  David Edelsohn  <edelsohn@gnu.org>
6f1b0c
6f1b0c
	PR target/16239
6f1b0c
	* config/rs6000/rs6000.md (movdi_internal64): Further disparage
6f1b0c
	f->f.
6f1b0c
6f1b0c
2002-11-06  David Edelsohn  <edelsohn@gnu.org>
6f1b0c
6f1b0c
	PR target/8480, optimization/8328
6f1b0c
	* config/rs6000/rs6000.md (movdi_internal64): Discourage
6f1b0c
	FPR to FPR moves.
6f1b0c
6f1b0c
2004-12-22  Ben Elliston  <bje@au.ibm.com>
6f1b0c
6f1b0c
	PR optimization/8328
6f1b0c
	* gcc.dg/pr8328.c: New test.
6f1b0c
6f1b0c
--- gcc/config/rs6000/rs6000.md	16 Jul 2003 11:40:06 -0000
6f1b0c
+++ gcc/config/rs6000/rs6000.md	22 Dec 2004 08:31:18 -0000
6f1b0c
@@ -8749,7 +8749,7 @@
6f1b0c
 }")
6f1b0c
 
6f1b0c
 (define_insn "*movdi_internal64"
6f1b0c
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,f,f,m,r,*h,*h")
6f1b0c
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,??f,f,m,r,*h,*h")
6f1b0c
 	(match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))]
6f1b0c
   "TARGET_POWERPC64
6f1b0c
    && (gpc_reg_operand (operands[0], DImode)
6f1b0c
6f1b0c
--- gcc/testsuite/gcc.dg/pr8328.c	1 Jan 1970 00:00:00 -0000
6f1b0c
+++ gcc/testsuite/gcc.dg/pr8328.c	22 Dec 2004 08:31:18 -0000
6f1b0c
@@ -0,0 +1,117 @@
6f1b0c
+/* { dg-do compile { target powerpc64-*-linux* } } */
6f1b0c
+/* { dg-options "-O3" } */
6f1b0c
+
6f1b0c
+/* This test case comes from the original PR.  */
6f1b0c
+
6f1b0c
+struct list
6f1b0c
+{
6f1b0c
+  unsigned short type;
6f1b0c
+  unsigned int len;
6f1b0c
+  void *data;
6f1b0c
+  short *ind;
6f1b0c
+};
6f1b0c
+
6f1b0c
+extern int foo (int *);
6f1b0c
+extern int bar (void);
6f1b0c
+extern int qwe (struct list *);
6f1b0c
+extern long check (int *);
6f1b0c
+extern void display (int *);
6f1b0c
+extern void trace (int *);
6f1b0c
+
6f1b0c
+int
6f1b0c
+myfunc (int *opts, char *str)
6f1b0c
+{
6f1b0c
+  short num;
6f1b0c
+  int loc;
6f1b0c
+  int start;
6f1b0c
+  int len;
6f1b0c
+  int code;
6f1b0c
+  int rc = 0;
6f1b0c
+
6f1b0c
+  if (code && (rc = check (opts)))
6f1b0c
+    goto exit;
6f1b0c
+
6f1b0c
+  foo (&code);
6f1b0c
+  {
6f1b0c
+    struct list mylist[1];
6f1b0c
+    mylist[0].type = 960;
6f1b0c
+    mylist[0].len = 4;
6f1b0c
+    mylist[0].data = (void *) &loc;
6f1b0c
+    mylist[0].ind = 0L;
6f1b0c
+    qwe (mylist);
6f1b0c
+  }
6f1b0c
+  bar ();
6f1b0c
+
6f1b0c
+  if (code && (rc = check (opts)))
6f1b0c
+    goto exit;
6f1b0c
+
6f1b0c
+  foo (&code);
6f1b0c
+  bar ();
6f1b0c
+
6f1b0c
+  if (code && (rc = check (opts)))
6f1b0c
+    goto exit;
6f1b0c
+
6f1b0c
+  if (opts)
6f1b0c
+    trace (opts);
6f1b0c
+
6f1b0c
+  display (opts);
6f1b0c
+
6f1b0c
+  while (code >= 0)
6f1b0c
+    {
6f1b0c
+      foo (&code);
6f1b0c
+      {
6f1b0c
+        struct list mylist[1];
6f1b0c
+        mylist[0].type = 500;
6f1b0c
+        mylist[0].len = 2;
6f1b0c
+        mylist[0].data = (void *) #
6f1b0c
+        mylist[0].ind = 0L;
6f1b0c
+        qwe (mylist);
6f1b0c
+      }
6f1b0c
+      bar ();
6f1b0c
+      {
6f1b0c
+        struct list mylist[3];
6f1b0c
+        mylist[0].type = 960;
6f1b0c
+        mylist[0].len = 4;
6f1b0c
+        mylist[0].data = (void *) &loc;
6f1b0c
+        mylist[0].ind = 0L;
6f1b0c
+        mylist[1].type = 496;
6f1b0c
+        mylist[1].len = 4;
6f1b0c
+        mylist[1].data = (void *) &start;
6f1b0c
+        mylist[1].ind = 0L;
6f1b0c
+        mylist[2].type = 496;
6f1b0c
+        mylist[2].len = 4;
6f1b0c
+        mylist[2].data = (void *) &len;
6f1b0c
+        mylist[2].ind = 0L;
6f1b0c
+        qwe (mylist);
6f1b0c
+      }
6f1b0c
+      {
6f1b0c
+        struct list mylist[4];
6f1b0c
+        mylist[0].type = 460;
6f1b0c
+        mylist[0].len = 129;
6f1b0c
+        mylist[0].data = (void *) str;
6f1b0c
+        mylist[0].ind = 0L;
6f1b0c
+        mylist[1].type = 460;
6f1b0c
+        mylist[1].len = 129;
6f1b0c
+        mylist[1].data = (void *) str;
6f1b0c
+        mylist[1].ind = 0L;
6f1b0c
+        mylist[2].type = 460;
6f1b0c
+        mylist[2].len = 9;
6f1b0c
+        mylist[2].data = (void *) str;
6f1b0c
+        mylist[2].ind = 0L;
6f1b0c
+        mylist[3].type = 500;
6f1b0c
+        mylist[3].len = 2;
6f1b0c
+        mylist[3].data = (void *) str;
6f1b0c
+        mylist[3].ind = 0L;
6f1b0c
+        qwe (mylist);
6f1b0c
+      }
6f1b0c
+    }
6f1b0c
+
6f1b0c
+ exit:
6f1b0c
+  {
6f1b0c
+    struct list mylist[1];
6f1b0c
+    mylist[0].data = (void *) &loc;
6f1b0c
+    mylist[0].ind = 0L;
6f1b0c
+    qwe (mylist);
6f1b0c
+  }
6f1b0c
+  return (rc);
6f1b0c
+}