OSDN Git Service

PR c/20740
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / i386-loop-1.c
1 /* PR optimization/9888 */
2 /* { dg-do run { target i?86-*-* } } */
3 /* { dg-xfail-if "" { *-*-* } { "-m64" } { "" } } */
4 /* { dg-options "-mtune=k6 -O3" } */
5
6 /* Verify that GCC doesn't emit out of range 'loop' instructions.  */
7
8 extern void abort (void);
9 extern void exit (int);
10
11    
12 f1 (a)
13      long a;
14 {
15   int i;
16   for (i = 0; i < 10; i++)
17     {
18       if (--a == -1)
19         return i;
20     }
21   return -1;
22 }
23
24 f2 (a)
25      long a;
26 {
27   int i;
28   for (i = 0; i < 10; i++)
29     {
30       if (--a != -1)
31         return i;
32     }
33   return -1;
34 }
35
36 f3 (a)
37      long a;
38 {
39   int i;
40   for (i = 0; i < 10; i++)
41     {
42       if (--a == 0)
43         return i;
44     }
45   return -1;
46 }
47
48 f4 (a)
49      long a;
50 {
51   int i;
52   for (i = 0; i < 10; i++)
53     {
54       if (--a != 0)
55         return i;
56     }
57   return -1;
58 }
59
60 f5 (a)
61      long a;
62 {
63   int i;
64   for (i = 0; i < 10; i++)
65     {
66       if (++a == 0)
67         return i;
68     }
69   return -1;
70 }
71
72 f6 (a)
73      long a;
74 {
75   int i;
76   for (i = 0; i < 10; i++)
77     {
78       if (++a != 0)
79         return i;
80     }
81   return -1;
82 }
83
84
85 int main()
86 {
87   if (f1 (5L) != 5)
88     abort ();
89   if (f2 (1L) != 0)
90     abort ();
91   if (f2 (0L) != 1)
92     abort ();
93   if (f3 (5L) != 4)
94     abort ();
95   if (f4 (1L) != 1)
96     abort ();
97   if (f4 (0L) != 0)
98     abort ();
99   if (f5 (-5L) != 4)
100     abort ();
101   if (f6 (-1L) != 1)
102     abort ();
103   if (f6 (0L) != 0)
104     abort ();
105   exit (0);
106 }