1 /* { dg-do compile } */
2 /* { dg-require-effective-target ia32 } */
3 /* { dg-options "-O2 -mtune=k6" } */
4
5 void
foo(unsigned char * x,const unsigned char * y)6 foo (unsigned char *x, const unsigned char *y)
7 {
8 int a = 6;
9 unsigned char *b;
10 for (;;)
11 {
12 unsigned char *c = x;
13
14 while (1)
15 {
16 if (c + 2 < y)
17 c += 3;
18 else
19 break;
20 }
21 b = x + a;
22 if (*c == 4 || *c == 5)
23 {
24 unsigned char d = c[2];
25
26 if (b[3] == 7 || b[3] == 8)
27 {
28 int e = b[3] == 8;
29 if (d < b[4] * 8 && b[5 + d / 8] & (1 << (d % 8)))
30 e = !e;
31 if (!e)
32 x[-3] = 26;
33 }
34 }
35 else if (*c == 7 && b[3] == 8)
36 {
37 int f;
38 for (f = 0; f < (int) c[1]; f++)
39 if (!(c[2 + f] == 0))
40 break;
41 if (f == c[1])
42 x[-3] = 26;
43 }
44 x -= 2;
45 }
46 }
47