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