1/* PR tree-optimization/51581 */ 2 3/* { dg-require-effective-target int32plus } */ 4 5extern void abort (void); 6 7#define N 4096 8int a[N], c[N]; 9unsigned int b[N], d[N]; 10 11__attribute__((noinline, noclone)) void 12f1 (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 20f2 (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 28f3 (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 36f4 (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 44f5 (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 52f6 (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 61f7 (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 69f8 (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 77f9 (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 85f10 (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 93f11 (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 101f12 (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 112int 113main () 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} 160