modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c (about) 1 /* Test that __builtin_prefetch does no harm. 2 3 Prefetch data using a variety of storage classes and address 4 expressions with volatile variables and pointers. */ 5 6 int glob_int_arr[100]; 7 int glob_int = 4; 8 volatile int glob_vol_int_arr[100]; 9 int * volatile glob_vol_ptr_int = glob_int_arr; 10 volatile int *glob_ptr_vol_int = glob_vol_int_arr; 11 volatile int * volatile glob_vol_ptr_vol_int = glob_vol_int_arr; 12 volatile int glob_vol_int; 13 14 static stat_int_arr[100]; 15 static volatile int stat_vol_int_arr[100]; 16 static int * volatile stat_vol_ptr_int = stat_int_arr; 17 static volatile int *stat_ptr_vol_int = stat_vol_int_arr; 18 static volatile int * volatile stat_vol_ptr_vol_int = stat_vol_int_arr; 19 static volatile int stat_vol_int; 20 21 struct S { 22 int a; 23 short b, c; 24 char d[8]; 25 struct S *next; 26 }; 27 28 struct S str; 29 volatile struct S vol_str; 30 struct S * volatile vol_ptr_str = &str; 31 volatile struct S *ptr_vol_str = &vol_str; 32 volatile struct S * volatile vol_ptr_vol_str = &vol_str; 33 34 /* Prefetch volatile global variables using the address of the variable. */ 35 36 void 37 simple_vol_global () 38 { 39 __builtin_prefetch (glob_vol_int_arr, 0, 0); 40 __builtin_prefetch (glob_vol_ptr_int, 0, 0); 41 __builtin_prefetch (glob_ptr_vol_int, 0, 0); 42 __builtin_prefetch (glob_vol_ptr_vol_int, 0, 0); 43 __builtin_prefetch (&glob_vol_int, 0, 0); 44 } 45 46 /* Prefetch volatile static variables using the address of the variable. */ 47 48 void 49 simple_vol_file () 50 { 51 __builtin_prefetch (stat_vol_int_arr, 0, 0); 52 __builtin_prefetch (stat_vol_ptr_int, 0, 0); 53 __builtin_prefetch (stat_ptr_vol_int, 0, 0); 54 __builtin_prefetch (stat_vol_ptr_vol_int, 0, 0); 55 __builtin_prefetch (&stat_vol_int, 0, 0); 56 } 57 58 /* Prefetch using address expressions involving volatile global variables. */ 59 60 void 61 expr_vol_global (void) 62 { 63 __builtin_prefetch (&vol_str, 0, 0); 64 __builtin_prefetch (ptr_vol_str, 0, 0); 65 __builtin_prefetch (vol_ptr_str, 0, 0); 66 __builtin_prefetch (vol_ptr_vol_str, 0, 0); 67 __builtin_prefetch (&vol_str.b, 0, 0); 68 __builtin_prefetch (&ptr_vol_str->b, 0, 0); 69 __builtin_prefetch (&vol_ptr_str->b, 0, 0); 70 __builtin_prefetch (&vol_ptr_vol_str->b, 0, 0); 71 __builtin_prefetch (&vol_str.d, 0, 0); 72 __builtin_prefetch (&vol_ptr_str->d, 0, 0); 73 __builtin_prefetch (&ptr_vol_str->d, 0, 0); 74 __builtin_prefetch (&vol_ptr_vol_str->d, 0, 0); 75 __builtin_prefetch (vol_str.next, 0, 0); 76 __builtin_prefetch (vol_ptr_str->next, 0, 0); 77 __builtin_prefetch (ptr_vol_str->next, 0, 0); 78 __builtin_prefetch (vol_ptr_vol_str->next, 0, 0); 79 __builtin_prefetch (vol_str.next->d, 0, 0); 80 __builtin_prefetch (vol_ptr_str->next->d, 0, 0); 81 __builtin_prefetch (ptr_vol_str->next->d, 0, 0); 82 __builtin_prefetch (vol_ptr_vol_str->next->d, 0, 0); 83 84 __builtin_prefetch (&glob_vol_int_arr, 0, 0); 85 __builtin_prefetch (glob_vol_ptr_int, 0, 0); 86 __builtin_prefetch (glob_ptr_vol_int, 0, 0); 87 __builtin_prefetch (glob_vol_ptr_vol_int, 0, 0); 88 __builtin_prefetch (&glob_vol_int_arr[2], 0, 0); 89 __builtin_prefetch (&glob_vol_ptr_int[3], 0, 0); 90 __builtin_prefetch (&glob_ptr_vol_int[3], 0, 0); 91 __builtin_prefetch (&glob_vol_ptr_vol_int[3], 0, 0); 92 __builtin_prefetch (glob_vol_int_arr+3, 0, 0); 93 __builtin_prefetch (glob_vol_int_arr+glob_vol_int, 0, 0); 94 __builtin_prefetch (glob_vol_ptr_int+5, 0, 0); 95 __builtin_prefetch (glob_ptr_vol_int+5, 0, 0); 96 __builtin_prefetch (glob_vol_ptr_vol_int+5, 0, 0); 97 __builtin_prefetch (glob_vol_ptr_int+glob_vol_int, 0, 0); 98 __builtin_prefetch (glob_ptr_vol_int+glob_vol_int, 0, 0); 99 __builtin_prefetch (glob_vol_ptr_vol_int+glob_vol_int, 0, 0); 100 } 101 102 int 103 main () 104 { 105 simple_vol_global (); 106 simple_vol_file (); 107 108 str.next = &str; 109 vol_str.next = &str; 110 expr_vol_global (); 111 112 exit (0); 113 }