1238106Sdes/* PR middle-end/45423 */ 2238106Sdes/* { dg-do compile } */ 3238106Sdes/* { dg-options "-fopenmp -fdump-tree-gimple -g0" } */ 4238106Sdes/* atomicvar should never be referenced in between the barrier and 5238106Sdes following #pragma omp atomic_load. */ 6238106Sdes/* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */ 7238106Sdes/* { dg-final { cleanup-tree-dump "gimple" } } */ 8238106Sdes 9238106Sdes#ifdef __cplusplus 10238106Sdesbool atomicvar, c; 11238106Sdes#else 12238106Sdes_Bool atomicvar, c; 13238106Sdes#endif 14238106Sdesint i, atomicvar2, c2; 15238106Sdes 16238106Sdesint 17238106Sdesfoo (void) 18238106Sdes{ 19238106Sdes #pragma omp barrier 20238106Sdes #pragma omp atomic 21238106Sdes atomicvar |= -1; 22238106Sdes #pragma omp barrier 23238106Sdes #pragma omp atomic 24238106Sdes atomicvar |= 0; 25238106Sdes #pragma omp barrier 26238106Sdes #pragma omp atomic 27238106Sdes atomicvar |= 1; 28238106Sdes #pragma omp barrier 29238106Sdes #pragma omp atomic 30238106Sdes atomicvar |= 2; 31238106Sdes #pragma omp barrier 32238106Sdes #pragma omp atomic 33238106Sdes atomicvar |= c; 34238106Sdes #pragma omp barrier 35238106Sdes #pragma omp atomic 36238106Sdes atomicvar ^= -1; 37238106Sdes #pragma omp barrier 38238106Sdes #pragma omp atomic 39238106Sdes atomicvar ^= 0; 40238106Sdes #pragma omp barrier 41238106Sdes #pragma omp atomic 42238106Sdes atomicvar ^= 1; 43238106Sdes #pragma omp barrier 44238106Sdes #pragma omp atomic 45238106Sdes atomicvar ^= 2; 46238106Sdes #pragma omp barrier 47238106Sdes #pragma omp atomic 48238106Sdes atomicvar ^= c; 49238106Sdes #pragma omp barrier 50238106Sdes #pragma omp atomic 51238106Sdes atomicvar &= -1; 52238106Sdes #pragma omp barrier 53238106Sdes #pragma omp atomic 54238106Sdes atomicvar &= 0; 55238106Sdes #pragma omp barrier 56238106Sdes #pragma omp atomic 57238106Sdes atomicvar &= 1; 58238106Sdes #pragma omp barrier 59238106Sdes #pragma omp atomic 60238106Sdes atomicvar &= 2; 61238106Sdes #pragma omp barrier 62238106Sdes #pragma omp atomic 63238106Sdes atomicvar &= c; 64238106Sdes #pragma omp barrier 65238106Sdes #pragma omp atomic 66238106Sdes atomicvar += -1; 67238106Sdes #pragma omp barrier 68238106Sdes #pragma omp atomic 69238106Sdes atomicvar += 0; 70238106Sdes #pragma omp barrier 71238106Sdes #pragma omp atomic 72238106Sdes atomicvar += 1; 73238106Sdes #pragma omp barrier 74238106Sdes #pragma omp atomic 75238106Sdes atomicvar += 2; 76238106Sdes #pragma omp barrier 77238106Sdes #pragma omp atomic 78238106Sdes atomicvar += c; 79238106Sdes #pragma omp barrier 80238106Sdes #pragma omp atomic 81238106Sdes atomicvar -= -1; 82238106Sdes #pragma omp barrier 83238106Sdes #pragma omp atomic 84238106Sdes atomicvar -= 0; 85238106Sdes #pragma omp barrier 86238106Sdes #pragma omp atomic 87238106Sdes atomicvar -= 1; 88238106Sdes #pragma omp barrier 89238106Sdes #pragma omp atomic 90238106Sdes atomicvar -= 2; 91238106Sdes #pragma omp barrier 92238106Sdes #pragma omp atomic 93238106Sdes atomicvar -= c; 94238106Sdes #pragma omp barrier 95238106Sdes #pragma omp atomic 96238106Sdes atomicvar *= -1; 97238106Sdes #pragma omp barrier 98238106Sdes #pragma omp atomic 99238106Sdes atomicvar *= 0; 100238106Sdes #pragma omp barrier 101238106Sdes #pragma omp atomic 102238106Sdes atomicvar *= 1; 103238106Sdes #pragma omp barrier 104238106Sdes #pragma omp atomic 105238106Sdes atomicvar *= 2; 106238106Sdes #pragma omp barrier 107238106Sdes #pragma omp atomic 108238106Sdes atomicvar *= c; 109238106Sdes #pragma omp barrier 110238106Sdes #pragma omp atomic 111238106Sdes atomicvar /= -1; 112238106Sdes #pragma omp barrier 113238106Sdes #pragma omp atomic 114238106Sdes atomicvar /= 1; 115238106Sdes #pragma omp barrier 116238106Sdes #pragma omp atomic 117238106Sdes atomicvar /= 2; 118238106Sdes #pragma omp barrier 119238106Sdes #pragma omp atomic 120238106Sdes atomicvar /= c; 121238106Sdes #pragma omp barrier 122238106Sdes #pragma omp atomic 123238106Sdes atomicvar <<= 0; 124238106Sdes #pragma omp barrier 125238106Sdes #pragma omp atomic 126238106Sdes atomicvar <<= 1; 127238106Sdes #pragma omp barrier 128238106Sdes #pragma omp atomic 129238106Sdes atomicvar <<= 2; 130238106Sdes #pragma omp barrier 131238106Sdes #pragma omp atomic 132238106Sdes atomicvar <<= i; 133238106Sdes #pragma omp barrier 134238106Sdes #pragma omp atomic 135238106Sdes atomicvar >>= 0; 136238106Sdes #pragma omp barrier 137238106Sdes #pragma omp atomic 138238106Sdes atomicvar >>= 1; 139238106Sdes #pragma omp barrier 140238106Sdes #pragma omp atomic 141238106Sdes atomicvar >>= 2; 142238106Sdes #pragma omp barrier 143238106Sdes #pragma omp atomic 144238106Sdes atomicvar >>= i; 145238106Sdes #pragma omp barrier 146238106Sdes #pragma omp atomic 147238106Sdes atomicvar++; 148238106Sdes #pragma omp barrier 149238106Sdes #pragma omp atomic 150238106Sdes ++atomicvar; 151238106Sdes #pragma omp barrier 152238106Sdes#ifndef __cplusplus 153238106Sdes #pragma omp atomic 154238106Sdes atomicvar--; 155238106Sdes #pragma omp barrier 156238106Sdes #pragma omp atomic 157238106Sdes --atomicvar; 158238106Sdes #pragma omp barrier 159238106Sdes#endif 160238106Sdes return 0; 161238106Sdes} 162238106Sdes 163238106Sdesint 164238106Sdesbar (void) 165238106Sdes{ 166238106Sdes #pragma omp barrier 167238106Sdes #pragma omp atomic 168238106Sdes atomicvar2 |= -1; 169238106Sdes #pragma omp barrier 170238106Sdes #pragma omp atomic 171238106Sdes atomicvar2 |= 0; 172238106Sdes #pragma omp barrier 173238106Sdes #pragma omp atomic 174238106Sdes atomicvar2 |= 1; 175238106Sdes #pragma omp barrier 176238106Sdes #pragma omp atomic 177238106Sdes atomicvar2 |= 2; 178238106Sdes #pragma omp barrier 179238106Sdes #pragma omp atomic 180238106Sdes atomicvar2 |= c2; 181238106Sdes #pragma omp barrier 182238106Sdes #pragma omp atomic 183238106Sdes atomicvar2 ^= -1; 184238106Sdes #pragma omp barrier 185238106Sdes #pragma omp atomic 186238106Sdes atomicvar2 ^= 0; 187238106Sdes #pragma omp barrier 188238106Sdes #pragma omp atomic 189238106Sdes atomicvar2 ^= 1; 190238106Sdes #pragma omp barrier 191238106Sdes #pragma omp atomic 192238106Sdes atomicvar2 ^= 2; 193238106Sdes #pragma omp barrier 194238106Sdes #pragma omp atomic 195238106Sdes atomicvar2 ^= c2; 196238106Sdes #pragma omp barrier 197238106Sdes #pragma omp atomic 198238106Sdes atomicvar2 &= -1; 199238106Sdes #pragma omp barrier 200238106Sdes #pragma omp atomic 201238106Sdes atomicvar2 &= 0; 202238106Sdes #pragma omp barrier 203238106Sdes #pragma omp atomic 204238106Sdes atomicvar2 &= 1; 205238106Sdes #pragma omp barrier 206238106Sdes #pragma omp atomic 207238106Sdes atomicvar2 &= 2; 208238106Sdes #pragma omp barrier 209238106Sdes #pragma omp atomic 210238106Sdes atomicvar2 &= c2; 211238106Sdes #pragma omp barrier 212238106Sdes #pragma omp atomic 213238106Sdes atomicvar2 += -1; 214238106Sdes #pragma omp barrier 215238106Sdes #pragma omp atomic 216238106Sdes atomicvar2 += 0; 217238106Sdes #pragma omp barrier 218238106Sdes #pragma omp atomic 219238106Sdes atomicvar2 += 1; 220238106Sdes #pragma omp barrier 221238106Sdes #pragma omp atomic 222238106Sdes atomicvar2 += 2; 223238106Sdes #pragma omp barrier 224238106Sdes #pragma omp atomic 225238106Sdes atomicvar2 += c2; 226238106Sdes #pragma omp barrier 227238106Sdes #pragma omp atomic 228238106Sdes atomicvar2 -= -1; 229238106Sdes #pragma omp barrier 230238106Sdes #pragma omp atomic 231238106Sdes atomicvar2 -= 0; 232238106Sdes #pragma omp barrier 233238106Sdes #pragma omp atomic 234238106Sdes atomicvar2 -= 1; 235238106Sdes #pragma omp barrier 236238106Sdes #pragma omp atomic 237238106Sdes atomicvar2 -= 2; 238238106Sdes #pragma omp barrier 239238106Sdes #pragma omp atomic 240238106Sdes atomicvar2 -= c2; 241238106Sdes #pragma omp barrier 242238106Sdes #pragma omp atomic 243238106Sdes atomicvar2 *= -1; 244238106Sdes #pragma omp barrier 245238106Sdes #pragma omp atomic 246238106Sdes atomicvar2 *= 0; 247238106Sdes #pragma omp barrier 248238106Sdes #pragma omp atomic 249238106Sdes atomicvar2 *= 1; 250238106Sdes #pragma omp barrier 251238106Sdes #pragma omp atomic 252238106Sdes atomicvar2 *= 2; 253238106Sdes #pragma omp barrier 254238106Sdes #pragma omp atomic 255238106Sdes atomicvar2 *= c2; 256238106Sdes #pragma omp barrier 257238106Sdes #pragma omp atomic 258238106Sdes atomicvar2 /= -1; 259238106Sdes #pragma omp barrier 260238106Sdes #pragma omp atomic 261238106Sdes atomicvar2 /= 1; 262238106Sdes #pragma omp barrier 263238106Sdes #pragma omp atomic 264238106Sdes atomicvar2 /= 2; 265238106Sdes #pragma omp barrier 266238106Sdes #pragma omp atomic 267238106Sdes atomicvar2 /= c2; 268238106Sdes #pragma omp barrier 269238106Sdes #pragma omp atomic 270238106Sdes atomicvar2 <<= 0; 271238106Sdes #pragma omp barrier 272238106Sdes #pragma omp atomic 273238106Sdes atomicvar2 <<= 1; 274238106Sdes #pragma omp barrier 275238106Sdes #pragma omp atomic 276238106Sdes atomicvar2 <<= 2; 277238106Sdes #pragma omp barrier 278238106Sdes #pragma omp atomic 279238106Sdes atomicvar2 <<= i; 280238106Sdes #pragma omp barrier 281238106Sdes #pragma omp atomic 282238106Sdes atomicvar2 >>= 0; 283238106Sdes #pragma omp barrier 284238106Sdes #pragma omp atomic 285238106Sdes atomicvar2 >>= 1; 286238106Sdes #pragma omp barrier 287238106Sdes #pragma omp atomic 288238106Sdes atomicvar2 >>= 2; 289238106Sdes #pragma omp barrier 290238106Sdes #pragma omp atomic 291238106Sdes atomicvar2 >>= i; 292238106Sdes #pragma omp barrier 293238106Sdes #pragma omp atomic 294238106Sdes atomicvar2++; 295238106Sdes #pragma omp barrier 296238106Sdes #pragma omp atomic 297238106Sdes ++atomicvar2; 298238106Sdes #pragma omp barrier 299238106Sdes #pragma omp atomic 300238106Sdes atomicvar2--; 301238106Sdes #pragma omp barrier 302238106Sdes #pragma omp atomic 303238106Sdes --atomicvar2; 304238106Sdes #pragma omp barrier 305238106Sdes return 0; 306238106Sdes} 307238106Sdes