111
|
1 /* { dg-do compile } */
|
131
|
2 /* { dg-options "-O2 -fdump-tree-pre -fno-ipa-sra" } */
|
111
|
3
|
|
4 typedef struct {
|
|
5 unsigned int key;
|
|
6 } S;
|
|
7 typedef struct s1 {
|
|
8 unsigned int key;
|
|
9 unsigned int bits;
|
|
10 struct s1 *left, *right;
|
|
11 }S1;
|
|
12 extern S a[1024];
|
|
13 static inline int bar( S* p, S1* n )
|
|
14 {
|
|
15 S1 *curr;
|
|
16 S1 *next;
|
|
17
|
|
18 if ( n->left == n )
|
|
19 return (int)(p->key == n->key);
|
|
20
|
|
21 curr = n;
|
|
22 next = n->left;
|
|
23
|
|
24 while (curr->bits > next->bits ) {
|
|
25 curr = next;
|
|
26 if (p->key & (1 << curr->bits))
|
|
27 next = curr->right;
|
|
28 else
|
|
29 next = curr->left;
|
|
30 }
|
|
31
|
|
32 return (int)(p->key == next->key);
|
|
33
|
|
34 }
|
|
35
|
|
36 int foo (S1 *root, int N)
|
|
37 {
|
|
38 volatile int r;
|
|
39 int i,j;
|
|
40 for (i=0; i<N; i++)
|
|
41 for (j=0;j<1024; j++)
|
|
42 r = bar(&a[j], root);
|
|
43 return 0;
|
|
44 }
|
|
45
|
|
46 /* { dg-final { scan-tree-dump-times "key" 3 "pre" } } */
|