svn merge -r102224:107263 svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-3_4-branch
[official-gcc.git] / gcc / testsuite / gcc.dg / i386-loop-1.c
blob635f012a4777a3d82f01e040277772a10e473378
1 /* PR optimization/9888 */
2 /* { dg-do run { target i?86-*-* } } */
3 /* { dg-options "-mtune=k6 -O3" } */
5 /* Verify that GCC doesn't emit out of range 'loop' instructions. */
7 extern void abort (void);
8 extern void exit (int);
11 f1 (a)
12 long a;
14 int i;
15 for (i = 0; i < 10; i++)
17 if (--a == -1)
18 return i;
20 return -1;
23 f2 (a)
24 long a;
26 int i;
27 for (i = 0; i < 10; i++)
29 if (--a != -1)
30 return i;
32 return -1;
35 f3 (a)
36 long a;
38 int i;
39 for (i = 0; i < 10; i++)
41 if (--a == 0)
42 return i;
44 return -1;
47 f4 (a)
48 long a;
50 int i;
51 for (i = 0; i < 10; i++)
53 if (--a != 0)
54 return i;
56 return -1;
59 f5 (a)
60 long a;
62 int i;
63 for (i = 0; i < 10; i++)
65 if (++a == 0)
66 return i;
68 return -1;
71 f6 (a)
72 long a;
74 int i;
75 for (i = 0; i < 10; i++)
77 if (++a != 0)
78 return i;
80 return -1;
84 int main()
86 if (f1 (5L) != 5)
87 abort ();
88 if (f2 (1L) != 0)
89 abort ();
90 if (f2 (0L) != 1)
91 abort ();
92 if (f3 (5L) != 4)
93 abort ();
94 if (f4 (1L) != 1)
95 abort ();
96 if (f4 (0L) != 0)
97 abort ();
98 if (f5 (-5L) != 4)
99 abort ();
100 if (f6 (-1L) != 1)
101 abort ();
102 if (f6 (0L) != 0)
103 abort ();
104 exit (0);