1139825Simp/* { dg-do run } */
2125184Sgrehan/* { dg-options "-O2" } */
3125184Sgrehan
4125184Sgrehanextern void abort (void);
5125184Sgrehanextern void exit (int);
6125184Sgrehan
7125184Sgrehanstatic inline __attribute__((always_inline))
8125184Sgrehanvoid
9125184Sgrehanprefetch (void *x)
10125184Sgrehan{
11125184Sgrehan  asm volatile("prefetcht0 %0" : : "m" (*(unsigned long *)x));
12125184Sgrehan}
13125184Sgrehan
14125184Sgrehanstruct hlist_head
15125184Sgrehan{
16125184Sgrehan  struct hlist_node *first;
17125184Sgrehan};
18125184Sgrehan
19125184Sgrehanstruct hlist_node
20125184Sgrehan{
21125184Sgrehan  struct hlist_node *next;
22125184Sgrehan  unsigned long i_ino;
23125184Sgrehan};
24125184Sgrehan
25125184Sgrehanstruct hlist_node * find_inode_fast(struct hlist_head *head, unsigned long ino)
26125184Sgrehan{
27125184Sgrehan  struct hlist_node *node;
28125184Sgrehan
29125184Sgrehan  for (node = head->first;
30125184Sgrehan       node && (prefetch (node->next), 1);
31125682Sgrehan       node = node->next)
32125184Sgrehan    {
33243040Skib      if (node->i_ino == ino)
34125184Sgrehan	break;
35125184Sgrehan    }
36125682Sgrehan  return node ? node : 0;
37125184Sgrehan}
38125184Sgrehan
39190681Snwhitehornstruct hlist_node g2;
40125184Sgrehanstruct hlist_node g1 = { &g2 };
41190681Snwhitehornstruct hlist_head h = { &g1 };
42125184Sgrehan
43190681Snwhitehornint
44125184Sgrehanmain()
45190681Snwhitehorn{
46125184Sgrehan  if (find_inode_fast (&h, 1) != 0)
47125184Sgrehan    abort ();
48125682Sgrehan  exit (0);
49125682Sgrehan}
50125682Sgrehan