OSDN Git Service

* gcc.c-torture/compile/20020604-1.c: New test.
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Jun 2002 16:28:57 +0000 (16:28 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Jun 2002 16:28:57 +0000 (16:28 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54342 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20020604-1.c [new file with mode: 0644]

index 365c333..576ef54 100644 (file)
@@ -1,3 +1,7 @@
+2002-06-07  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.c-torture/compile/20020604-1.c: New test.
+
 2002-06-04  Richard Henderson  <rth@redhat.com>
 
        * gcc.dg/alpha-base-1.c: Add ext/ins/msk/umulh cases.
diff --git a/gcc/testsuite/gcc.c-torture/compile/20020604-1.c b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c
new file mode 100644 (file)
index 0000000..19e0820
--- /dev/null
@@ -0,0 +1,87 @@
+/* PR c/6957
+   This testcase ICEd at -O2 on IA-32, because
+   (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0)
+          (plus:SF (reg:SF 73)
+              (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil))
+       (expr_list:REG_DEAD (reg:SF 73) (nil)))
+   couldn't be reloaded. */
+
+void
+foo (unsigned int n, int x, int y, unsigned char *z)
+{
+  int a, b;
+  float c[2048][4];
+
+  switch (x)
+    {
+    case 0x1906:
+      a = b = -1;
+      break;
+    case 0x190A:
+      a = b = -1;
+      break;
+    case 0x8049:
+      a = b = -1;
+      break;
+    case 0x1907:
+      a = 1;
+      b = 2;
+      break;
+    default:
+      return;
+    }
+
+  if (a >= 0)
+    {
+      unsigned char *d = z;
+      unsigned int i;
+      for (i = 0; i < n; i++)
+       {
+         do
+           {
+             union
+             {
+               float r;
+               unsigned int i;
+             }
+             e;
+             e.r = c[i][1];
+             d[a] =
+               ((e.i >= 0x3f7f0000) ? ((int) e.i <
+                                           0) ? (unsigned char) 0
+                : (unsigned char) 255 : (e.r =
+                                         e.r * (255.0F / 256.0F) +
+                                         32768.0F, (unsigned char) e.i));
+           }
+         while (0);
+         d += y;
+       }
+    }
+
+  if (b >= 0)
+    {
+      unsigned char *d = z;
+      unsigned int i;
+      for (i = 0; i < n; i++)
+       {
+         do
+           {
+             union
+             {
+               float r;
+               unsigned int i;
+             }
+             e;
+             e.r = c[i][2];
+             d[b] =
+               ((e.i >= 0x3f7f0000) ? ((int) e.i <
+                                           0) ? (unsigned char) 0
+                : (unsigned char) 255 : (e.r =
+                                         e.r * (255.0F / 256.0F) +
+                                         32768.0F, (unsigned char) e.i));
+           }
+         while (0);
+         d += y;
+       }
+    }
+}