modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr51581-2.c (about) 1 /* PR tree-optimization/51581 */ 2 /* { dg-require-effective-target int32plus } */ 3 4 extern void abort (void); 5 6 #define N 4096 7 int a[N], c[N]; 8 unsigned int b[N], d[N]; 9 10 __attribute__((noinline, noclone)) void 11 f1 (void) 12 { 13 int i; 14 for (i = 0; i < N; i++) 15 c[i] = a[i] % 3; 16 } 17 18 __attribute__((noinline, noclone)) void 19 f2 (void) 20 { 21 int i; 22 for (i = 0; i < N; i++) 23 d[i] = b[i] % 3; 24 } 25 26 __attribute__((noinline, noclone)) void 27 f3 (void) 28 { 29 int i; 30 for (i = 0; i < N; i++) 31 c[i] = a[i] % 18; 32 } 33 34 __attribute__((noinline, noclone)) void 35 f4 (void) 36 { 37 int i; 38 for (i = 0; i < N; i++) 39 d[i] = b[i] % 18; 40 } 41 42 __attribute__((noinline, noclone)) void 43 f5 (void) 44 { 45 int i; 46 for (i = 0; i < N; i++) 47 c[i] = a[i] % 19; 48 } 49 50 __attribute__((noinline, noclone)) void 51 f6 (void) 52 { 53 int i; 54 for (i = 0; i < N; i++) 55 d[i] = b[i] % 19; 56 } 57 58 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 59 __attribute__((noinline, noclone)) void 60 f7 (void) 61 { 62 int i; 63 for (i = 0; i < N; i++) 64 { 65 int x = (int) ((unsigned long long) (a[i] * 0x55555556LL) >> 32) - (a[i] >> 31); 66 c[i] = a[i] - x * 3; 67 } 68 } 69 70 __attribute__((noinline, noclone)) void 71 f8 (void) 72 { 73 int i; 74 for (i = 0; i < N; i++) 75 { 76 unsigned int x = ((unsigned int) ((b[i] * 0xaaaaaaabULL) >> 32) >> 1); 77 d[i] = b[i] - x * 3; 78 } 79 } 80 81 __attribute__((noinline, noclone)) void 82 f9 (void) 83 { 84 int i; 85 for (i = 0; i < N; i++) 86 { 87 int x = (((int) ((unsigned long long) (a[i] * 0x38e38e39LL) >> 32)) >> 2) - (a[i] >> 31); 88 c[i] = a[i] - x * 18; 89 } 90 } 91 92 __attribute__((noinline, noclone)) void 93 f10 (void) 94 { 95 int i; 96 for (i = 0; i < N; i++) 97 { 98 unsigned int x = (unsigned int) ((b[i] * 0x38e38e39ULL) >> 32) >> 2; 99 d[i] = b[i] - x * 18; 100 } 101 } 102 103 __attribute__((noinline, noclone)) void 104 f11 (void) 105 { 106 int i; 107 for (i = 0; i < N; i++) 108 { 109 int x = (((int) ((unsigned long long) (a[i] * 0x6bca1af3LL) >> 32)) >> 3) - (a[i] >> 31); 110 c[i] = a[i] - x * 19; 111 } 112 } 113 114 __attribute__((noinline, noclone)) void 115 f12 (void) 116 { 117 int i; 118 for (i = 0; i < N; i++) 119 { 120 unsigned int tmp = (b[i] * 0xaf286bcbULL) >> 32; 121 unsigned int x = (((b[i] - tmp) >> 1) + tmp) >> 4; 122 d[i] = b[i] - x * 19; 123 } 124 } 125 #endif 126 127 int 128 main () 129 { 130 int i; 131 for (i = 0; i < N; i++) 132 { 133 asm (""); 134 a[i] = i - N / 2; 135 b[i] = i; 136 } 137 a[0] = -__INT_MAX__ - 1; 138 a[1] = -__INT_MAX__; 139 a[N - 1] = __INT_MAX__; 140 b[N - 1] = ~0; 141 f1 (); 142 f2 (); 143 for (i = 0; i < N; i++) 144 if (c[i] != a[i] % 3 || d[i] != b[i] % 3) 145 abort (); 146 f3 (); 147 f4 (); 148 for (i = 0; i < N; i++) 149 if (c[i] != a[i] % 18 || d[i] != b[i] % 18) 150 abort (); 151 f5 (); 152 f6 (); 153 for (i = 0; i < N; i++) 154 if (c[i] != a[i] % 19 || d[i] != b[i] % 19) 155 abort (); 156 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 157 f7 (); 158 f8 (); 159 for (i = 0; i < N; i++) 160 if (c[i] != a[i] % 3 || d[i] != b[i] % 3) 161 abort (); 162 f9 (); 163 f10 (); 164 for (i = 0; i < N; i++) 165 if (c[i] != a[i] % 18 || d[i] != b[i] % 18) 166 abort (); 167 f11 (); 168 f12 (); 169 for (i = 0; i < N; i++) 170 if (c[i] != a[i] % 19 || d[i] != b[i] % 19) 171 abort (); 172 #endif 173 return 0; 174 }