1 /* { dg-do run } */ 2 /* { dg-options "-O2" } */ 3 4 extern void abort (void); 5 extern void exit (int); 6 7 static inline __attribute__((always_inline)) 8 void prefetch(void * x)9prefetch (void *x) 10 { 11 asm volatile("prefetcht0 %0" : : "m" (*(unsigned long *)x)); 12 } 13 14 struct hlist_head 15 { 16 struct hlist_node *first; 17 }; 18 19 struct hlist_node 20 { 21 struct hlist_node *next; 22 unsigned long i_ino; 23 }; 24 find_inode_fast(struct hlist_head * head,unsigned long ino)25struct hlist_node * find_inode_fast(struct hlist_head *head, unsigned long ino) 26 { 27 struct hlist_node *node; 28 29 for (node = head->first; 30 node && (prefetch (node->next), 1); 31 node = node->next) 32 { 33 if (node->i_ino == ino) 34 break; 35 } 36 return node ? node : 0; 37 } 38 39 struct hlist_node g2; 40 struct hlist_node g1 = { &g2 }; 41 struct hlist_head h = { &g1 }; 42 43 int main()44main() 45 { 46 if (find_inode_fast (&h, 1) != 0) 47 abort (); 48 exit (0); 49 } 50