47 lines
796 B
C
47 lines
796 B
C
/* { dg-do compile } */
|
|
/* { dg-options "-O2 -fdump-tree-pre -fno-ipa-sra" } */
|
|
|
|
typedef struct {
|
|
unsigned int key;
|
|
} S;
|
|
typedef struct s1 {
|
|
unsigned int key;
|
|
unsigned int bits;
|
|
struct s1 *left, *right;
|
|
}S1;
|
|
extern S a[1024];
|
|
static inline int bar( S* p, S1* n )
|
|
{
|
|
S1 *curr;
|
|
S1 *next;
|
|
|
|
if ( n->left == n )
|
|
return (int)(p->key == n->key);
|
|
|
|
curr = n;
|
|
next = n->left;
|
|
|
|
while (curr->bits > next->bits ) {
|
|
curr = next;
|
|
if (p->key & (1 << curr->bits))
|
|
next = curr->right;
|
|
else
|
|
next = curr->left;
|
|
}
|
|
|
|
return (int)(p->key == next->key);
|
|
|
|
}
|
|
|
|
int foo (S1 *root, int N)
|
|
{
|
|
volatile int r;
|
|
int i,j;
|
|
for (i=0; i<N; i++)
|
|
for (j=0;j<1024; j++)
|
|
r = bar(&a[j], root);
|
|
return 0;
|
|
}
|
|
|
|
/* { dg-final { scan-tree-dump-times "key" 3 "pre" } } */
|