* gcc.dg/i386-loop-1.c: New test.
authorEric Botcazou <ebotcazou@libertysurf.fr>
Sun, 9 Mar 2003 15:40:00 +0000 (16:40 +0100)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 9 Mar 2003 15:40:00 +0000 (15:40 +0000)
From-SVN: r64031

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/i386-loop-1.c [new file with mode: 0644]

index 15d6935eba573c250e1b2df4573d61044b94d1d9..4c26c4868e7493a4a5b0b3f150d636a391e5e04c 100644 (file)
@@ -1,3 +1,7 @@
+2003-03-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * gcc.dg/i386-loop-1.c: New test.
+
 2003-03-09  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        PR c++/9970
diff --git a/gcc/testsuite/gcc.dg/i386-loop-1.c b/gcc/testsuite/gcc.dg/i386-loop-1.c
new file mode 100644 (file)
index 0000000..635f012
--- /dev/null
@@ -0,0 +1,105 @@
+/* PR optimization/9888 */
+/* { dg-do run { target i?86-*-* } } */
+/* { dg-options "-mtune=k6 -O3" } */
+
+/* Verify that GCC doesn't emit out of range 'loop' instructions.  */
+
+extern void abort (void);
+extern void exit (int);
+
+   
+f1 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (--a == -1)
+       return i;
+    }
+  return -1;
+}
+
+f2 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (--a != -1)
+       return i;
+    }
+  return -1;
+}
+
+f3 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (--a == 0)
+       return i;
+    }
+  return -1;
+}
+
+f4 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (--a != 0)
+       return i;
+    }
+  return -1;
+}
+
+f5 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (++a == 0)
+       return i;
+    }
+  return -1;
+}
+
+f6 (a)
+     long a;
+{
+  int i;
+  for (i = 0; i < 10; i++)
+    {
+      if (++a != 0)
+       return i;
+    }
+  return -1;
+}
+
+
+int main()
+{
+  if (f1 (5L) != 5)
+    abort ();
+  if (f2 (1L) != 0)
+    abort ();
+  if (f2 (0L) != 1)
+    abort ();
+  if (f3 (5L) != 4)
+    abort ();
+  if (f4 (1L) != 1)
+    abort ();
+  if (f4 (0L) != 0)
+    abort ();
+  if (f5 (-5L) != 4)
+    abort ();
+  if (f6 (-1L) != 1)
+    abort ();
+  if (f6 (0L) != 0)
+    abort ();
+  exit (0);
+}