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