OSDN Git Service

* gcc.c-torture/compile/20021120-1.c: New test.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / compile / 20020604-1.c
1 /* PR c/6957
2    This testcase ICEd at -O2 on IA-32, because
3    (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0)
4            (plus:SF (reg:SF 73)
5                (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil))
6        (expr_list:REG_DEAD (reg:SF 73) (nil)))
7    couldn't be reloaded. */
8
9 void
10 foo (unsigned int n, int x, int y, unsigned char *z)
11 {
12   int a, b;
13   float c[2048][4];
14
15   switch (x)
16     {
17     case 0x1906:
18       a = b = -1;
19       break;
20     case 0x190A:
21       a = b = -1;
22       break;
23     case 0x8049:
24       a = b = -1;
25       break;
26     case 0x1907:
27       a = 1;
28       b = 2;
29       break;
30     default:
31       return;
32     }
33
34   if (a >= 0)
35     {
36       unsigned char *d = z;
37       unsigned int i;
38       for (i = 0; i < n; i++)
39         {
40           do
41             {
42               union
43               {
44                 float r;
45                 unsigned int i;
46               }
47               e;
48               e.r = c[i][1];
49               d[a] =
50                 ((e.i >= 0x3f7f0000) ? ((int) e.i <
51                                             0) ? (unsigned char) 0
52                  : (unsigned char) 255 : (e.r =
53                                           e.r * (255.0F / 256.0F) +
54                                           32768.0F, (unsigned char) e.i));
55             }
56           while (0);
57           d += y;
58         }
59     }
60
61   if (b >= 0)
62     {
63       unsigned char *d = z;
64       unsigned int i;
65       for (i = 0; i < n; i++)
66         {
67           do
68             {
69               union
70               {
71                 float r;
72                 unsigned int i;
73               }
74               e;
75               e.r = c[i][2];
76               d[b] =
77                 ((e.i >= 0x3f7f0000) ? ((int) e.i <
78                                             0) ? (unsigned char) 0
79                  : (unsigned char) 255 : (e.r =
80                                           e.r * (255.0F / 256.0F) +
81                                           32768.0F, (unsigned char) e.i));
82             }
83           while (0);
84           d += y;
85         }
86     }
87 }