1*404b540aSrobert! { dg-do run } 2*404b540aSrobert 3*404b540aSrobert integer, dimension (128) :: a, b 4*404b540aSrobert integer :: i, j 5*404b540aSrobert logical :: k 6*404b540aSrobert a = -1 7*404b540aSrobert b = -1 8*404b540aSrobert do i = 1, 128 9*404b540aSrobert if (i .ge. 8 .and. i .le. 15) then 10*404b540aSrobert b(i) = 1 * 256 + i 11*404b540aSrobert else if (i .ge. 19 .and. i .le. 23) then 12*404b540aSrobert b(i) = 2 * 256 + i 13*404b540aSrobert else if (i .ge. 28 .and. i .le. 38) then 14*404b540aSrobert if (iand (i, 1) .eq. 0) b(i) = 3 * 256 + i 15*404b540aSrobert else if (i .ge. 59 .and. i .le. 79) then 16*404b540aSrobert if (iand (i - 59, 3) .eq. 0) b(i) = 4 * 256 + i 17*404b540aSrobert else if (i .ge. 101 .and. i .le. 125) then 18*404b540aSrobert if (mod (i - 101, 12) .eq. 0) b(i) = 5 * 256 + i 19*404b540aSrobert end if 20*404b540aSrobert end do 21*404b540aSrobert 22*404b540aSrobert k = .false. 23*404b540aSrobert j = 8 24*404b540aSrobert!$omp parallel num_threads (4) 25*404b540aSrobert 26*404b540aSrobert!$omp do ordered 27*404b540aSrobert do i = 8, 15 28*404b540aSrobert a(i) = 1 * 256 + i 29*404b540aSrobert!$omp ordered 30*404b540aSrobert if (i .ne. j) k = .true. 31*404b540aSrobert j = j + 1 32*404b540aSrobert!$omp end ordered 33*404b540aSrobert end do 34*404b540aSrobert 35*404b540aSrobert!$omp single 36*404b540aSrobert j = 23 37*404b540aSrobert!$omp end single 38*404b540aSrobert 39*404b540aSrobert!$omp do ordered 40*404b540aSrobert do i = 23, 19, -1 41*404b540aSrobert a(i) = 2 * 256 + i 42*404b540aSrobert!$omp ordered 43*404b540aSrobert if (i .ne. j) k = .true. 44*404b540aSrobert j = j - 1 45*404b540aSrobert!$omp end ordered 46*404b540aSrobert end do 47*404b540aSrobert 48*404b540aSrobert!$omp single 49*404b540aSrobert j = 28 50*404b540aSrobert!$omp end single 51*404b540aSrobert 52*404b540aSrobert!$omp do ordered 53*404b540aSrobert do i = 28, 39, 2 54*404b540aSrobert a(i) = 3 * 256 + i 55*404b540aSrobert!$omp ordered 56*404b540aSrobert if (i .ne. j) k = .true. 57*404b540aSrobert j = j + 2 58*404b540aSrobert!$omp end ordered 59*404b540aSrobert end do 60*404b540aSrobert 61*404b540aSrobert!$omp single 62*404b540aSrobert j = 79 63*404b540aSrobert!$omp end single 64*404b540aSrobert 65*404b540aSrobert!$omp do ordered 66*404b540aSrobert do i = 79, 59, -4 67*404b540aSrobert a(i) = 4 * 256 + i 68*404b540aSrobert!$omp ordered 69*404b540aSrobert if (i .ne. j) k = .true. 70*404b540aSrobert j = j - 4 71*404b540aSrobert!$omp end ordered 72*404b540aSrobert end do 73*404b540aSrobert 74*404b540aSrobert!$omp single 75*404b540aSrobert j = 125 76*404b540aSrobert!$omp end single 77*404b540aSrobert 78*404b540aSrobert!$omp do ordered 79*404b540aSrobert do i = 125, 90, -12 80*404b540aSrobert a(i) = 5 * 256 + i 81*404b540aSrobert!$omp ordered 82*404b540aSrobert if (i .ne. j) k = .true. 83*404b540aSrobert j = j - 12 84*404b540aSrobert!$omp end ordered 85*404b540aSrobert end do 86*404b540aSrobert 87*404b540aSrobert!$omp end parallel 88*404b540aSrobert 89*404b540aSrobert if (any (a .ne. b) .or. k) call abort 90*404b540aSrobert a = -1 91*404b540aSrobert k = .false. 92*404b540aSrobert j = 8 93*404b540aSrobert!$omp parallel num_threads (4) 94*404b540aSrobert 95*404b540aSrobert!$omp do ordered schedule (static) 96*404b540aSrobert do i = 8, 15 97*404b540aSrobert a(i) = 1 * 256 + i 98*404b540aSrobert!$omp ordered 99*404b540aSrobert if (i .ne. j) k = .true. 100*404b540aSrobert j = j + 1 101*404b540aSrobert!$omp end ordered 102*404b540aSrobert end do 103*404b540aSrobert 104*404b540aSrobert!$omp single 105*404b540aSrobert j = 23 106*404b540aSrobert!$omp end single 107*404b540aSrobert 108*404b540aSrobert!$omp do ordered schedule (static, 1) 109*404b540aSrobert do i = 23, 19, -1 110*404b540aSrobert a(i) = 2 * 256 + i 111*404b540aSrobert!$omp ordered 112*404b540aSrobert if (i .ne. j) k = .true. 113*404b540aSrobert j = j - 1 114*404b540aSrobert!$omp end ordered 115*404b540aSrobert end do 116*404b540aSrobert 117*404b540aSrobert!$omp single 118*404b540aSrobert j = 28 119*404b540aSrobert!$omp end single 120*404b540aSrobert 121*404b540aSrobert!$omp do ordered schedule (static, 3) 122*404b540aSrobert do i = 28, 39, 2 123*404b540aSrobert a(i) = 3 * 256 + i 124*404b540aSrobert!$omp ordered 125*404b540aSrobert if (i .ne. j) k = .true. 126*404b540aSrobert j = j + 2 127*404b540aSrobert!$omp end ordered 128*404b540aSrobert end do 129*404b540aSrobert 130*404b540aSrobert!$omp single 131*404b540aSrobert j = 79 132*404b540aSrobert!$omp end single 133*404b540aSrobert 134*404b540aSrobert!$omp do ordered schedule (static, 6) 135*404b540aSrobert do i = 79, 59, -4 136*404b540aSrobert a(i) = 4 * 256 + i 137*404b540aSrobert!$omp ordered 138*404b540aSrobert if (i .ne. j) k = .true. 139*404b540aSrobert j = j - 4 140*404b540aSrobert!$omp end ordered 141*404b540aSrobert end do 142*404b540aSrobert 143*404b540aSrobert!$omp single 144*404b540aSrobert j = 125 145*404b540aSrobert!$omp end single 146*404b540aSrobert 147*404b540aSrobert!$omp do ordered schedule (static, 2) 148*404b540aSrobert do i = 125, 90, -12 149*404b540aSrobert a(i) = 5 * 256 + i 150*404b540aSrobert!$omp ordered 151*404b540aSrobert if (i .ne. j) k = .true. 152*404b540aSrobert j = j - 12 153*404b540aSrobert!$omp end ordered 154*404b540aSrobert end do 155*404b540aSrobert 156*404b540aSrobert!$omp end parallel 157*404b540aSrobert 158*404b540aSrobert if (any (a .ne. b) .or. k) call abort 159*404b540aSrobert a = -1 160*404b540aSrobert k = .false. 161*404b540aSrobert j = 8 162*404b540aSrobert!$omp parallel num_threads (4) 163*404b540aSrobert 164*404b540aSrobert!$omp do ordered schedule (dynamic) 165*404b540aSrobert do i = 8, 15 166*404b540aSrobert a(i) = 1 * 256 + i 167*404b540aSrobert!$omp ordered 168*404b540aSrobert if (i .ne. j) k = .true. 169*404b540aSrobert j = j + 1 170*404b540aSrobert!$omp end ordered 171*404b540aSrobert end do 172*404b540aSrobert 173*404b540aSrobert!$omp single 174*404b540aSrobert j = 23 175*404b540aSrobert!$omp end single 176*404b540aSrobert 177*404b540aSrobert!$omp do ordered schedule (dynamic, 4) 178*404b540aSrobert do i = 23, 19, -1 179*404b540aSrobert a(i) = 2 * 256 + i 180*404b540aSrobert!$omp ordered 181*404b540aSrobert if (i .ne. j) k = .true. 182*404b540aSrobert j = j - 1 183*404b540aSrobert!$omp end ordered 184*404b540aSrobert end do 185*404b540aSrobert 186*404b540aSrobert!$omp single 187*404b540aSrobert j = 28 188*404b540aSrobert!$omp end single 189*404b540aSrobert 190*404b540aSrobert!$omp do ordered schedule (dynamic, 1) 191*404b540aSrobert do i = 28, 39, 2 192*404b540aSrobert a(i) = 3 * 256 + i 193*404b540aSrobert!$omp ordered 194*404b540aSrobert if (i .ne. j) k = .true. 195*404b540aSrobert j = j + 2 196*404b540aSrobert!$omp end ordered 197*404b540aSrobert end do 198*404b540aSrobert 199*404b540aSrobert!$omp single 200*404b540aSrobert j = 79 201*404b540aSrobert!$omp end single 202*404b540aSrobert 203*404b540aSrobert!$omp do ordered schedule (dynamic, 2) 204*404b540aSrobert do i = 79, 59, -4 205*404b540aSrobert a(i) = 4 * 256 + i 206*404b540aSrobert!$omp ordered 207*404b540aSrobert if (i .ne. j) k = .true. 208*404b540aSrobert j = j - 4 209*404b540aSrobert!$omp end ordered 210*404b540aSrobert end do 211*404b540aSrobert 212*404b540aSrobert!$omp single 213*404b540aSrobert j = 125 214*404b540aSrobert!$omp end single 215*404b540aSrobert 216*404b540aSrobert!$omp do ordered schedule (dynamic, 3) 217*404b540aSrobert do i = 125, 90, -12 218*404b540aSrobert a(i) = 5 * 256 + i 219*404b540aSrobert!$omp ordered 220*404b540aSrobert if (i .ne. j) k = .true. 221*404b540aSrobert j = j - 12 222*404b540aSrobert!$omp end ordered 223*404b540aSrobert end do 224*404b540aSrobert 225*404b540aSrobert!$omp end parallel 226*404b540aSrobert 227*404b540aSrobert if (any (a .ne. b) .or. k) call abort 228*404b540aSrobert a = -1 229*404b540aSrobert k = .false. 230*404b540aSrobert j = 8 231*404b540aSrobert!$omp parallel num_threads (4) 232*404b540aSrobert 233*404b540aSrobert!$omp do ordered schedule (guided) 234*404b540aSrobert do i = 8, 15 235*404b540aSrobert a(i) = 1 * 256 + i 236*404b540aSrobert!$omp ordered 237*404b540aSrobert if (i .ne. j) k = .true. 238*404b540aSrobert j = j + 1 239*404b540aSrobert!$omp end ordered 240*404b540aSrobert end do 241*404b540aSrobert 242*404b540aSrobert!$omp single 243*404b540aSrobert j = 23 244*404b540aSrobert!$omp end single 245*404b540aSrobert 246*404b540aSrobert!$omp do ordered schedule (guided, 4) 247*404b540aSrobert do i = 23, 19, -1 248*404b540aSrobert a(i) = 2 * 256 + i 249*404b540aSrobert!$omp ordered 250*404b540aSrobert if (i .ne. j) k = .true. 251*404b540aSrobert j = j - 1 252*404b540aSrobert!$omp end ordered 253*404b540aSrobert end do 254*404b540aSrobert 255*404b540aSrobert!$omp single 256*404b540aSrobert j = 28 257*404b540aSrobert!$omp end single 258*404b540aSrobert 259*404b540aSrobert!$omp do ordered schedule (guided, 1) 260*404b540aSrobert do i = 28, 39, 2 261*404b540aSrobert a(i) = 3 * 256 + i 262*404b540aSrobert!$omp ordered 263*404b540aSrobert if (i .ne. j) k = .true. 264*404b540aSrobert j = j + 2 265*404b540aSrobert!$omp end ordered 266*404b540aSrobert end do 267*404b540aSrobert 268*404b540aSrobert!$omp single 269*404b540aSrobert j = 79 270*404b540aSrobert!$omp end single 271*404b540aSrobert 272*404b540aSrobert!$omp do ordered schedule (guided, 2) 273*404b540aSrobert do i = 79, 59, -4 274*404b540aSrobert a(i) = 4 * 256 + i 275*404b540aSrobert!$omp ordered 276*404b540aSrobert if (i .ne. j) k = .true. 277*404b540aSrobert j = j - 4 278*404b540aSrobert!$omp end ordered 279*404b540aSrobert end do 280*404b540aSrobert 281*404b540aSrobert!$omp single 282*404b540aSrobert j = 125 283*404b540aSrobert!$omp end single 284*404b540aSrobert 285*404b540aSrobert!$omp do ordered schedule (guided, 3) 286*404b540aSrobert do i = 125, 90, -12 287*404b540aSrobert a(i) = 5 * 256 + i 288*404b540aSrobert!$omp ordered 289*404b540aSrobert if (i .ne. j) k = .true. 290*404b540aSrobert j = j - 12 291*404b540aSrobert!$omp end ordered 292*404b540aSrobert end do 293*404b540aSrobert 294*404b540aSrobert!$omp end parallel 295*404b540aSrobert 296*404b540aSrobert if (any (a .ne. b) .or. k) call abort 297*404b540aSrobert a = -1 298*404b540aSrobert k = .false. 299*404b540aSrobert j = 8 300*404b540aSrobert!$omp parallel num_threads (4) 301*404b540aSrobert 302*404b540aSrobert!$omp do ordered schedule (runtime) 303*404b540aSrobert do i = 8, 15 304*404b540aSrobert a(i) = 1 * 256 + i 305*404b540aSrobert!$omp ordered 306*404b540aSrobert if (i .ne. j) k = .true. 307*404b540aSrobert j = j + 1 308*404b540aSrobert!$omp end ordered 309*404b540aSrobert end do 310*404b540aSrobert 311*404b540aSrobert!$omp single 312*404b540aSrobert j = 23 313*404b540aSrobert!$omp end single 314*404b540aSrobert 315*404b540aSrobert!$omp do ordered schedule (runtime) 316*404b540aSrobert do i = 23, 19, -1 317*404b540aSrobert a(i) = 2 * 256 + i 318*404b540aSrobert!$omp ordered 319*404b540aSrobert if (i .ne. j) k = .true. 320*404b540aSrobert j = j - 1 321*404b540aSrobert!$omp end ordered 322*404b540aSrobert end do 323*404b540aSrobert 324*404b540aSrobert!$omp single 325*404b540aSrobert j = 28 326*404b540aSrobert!$omp end single 327*404b540aSrobert 328*404b540aSrobert!$omp do ordered schedule (runtime) 329*404b540aSrobert do i = 28, 39, 2 330*404b540aSrobert a(i) = 3 * 256 + i 331*404b540aSrobert!$omp ordered 332*404b540aSrobert if (i .ne. j) k = .true. 333*404b540aSrobert j = j + 2 334*404b540aSrobert!$omp end ordered 335*404b540aSrobert end do 336*404b540aSrobert 337*404b540aSrobert!$omp single 338*404b540aSrobert j = 79 339*404b540aSrobert!$omp end single 340*404b540aSrobert 341*404b540aSrobert!$omp do ordered schedule (runtime) 342*404b540aSrobert do i = 79, 59, -4 343*404b540aSrobert a(i) = 4 * 256 + i 344*404b540aSrobert!$omp ordered 345*404b540aSrobert if (i .ne. j) k = .true. 346*404b540aSrobert j = j - 4 347*404b540aSrobert!$omp end ordered 348*404b540aSrobert end do 349*404b540aSrobert 350*404b540aSrobert!$omp single 351*404b540aSrobert j = 125 352*404b540aSrobert!$omp end single 353*404b540aSrobert 354*404b540aSrobert!$omp do ordered schedule (runtime) 355*404b540aSrobert do i = 125, 90, -12 356*404b540aSrobert a(i) = 5 * 256 + i 357*404b540aSrobert!$omp ordered 358*404b540aSrobert if (i .ne. j) k = .true. 359*404b540aSrobert j = j - 12 360*404b540aSrobert!$omp end ordered 361*404b540aSrobert end do 362*404b540aSrobert 363*404b540aSrobert!$omp end parallel 364*404b540aSrobert 365*404b540aSrobert if (any (a .ne. b) .or. k) call abort 366*404b540aSrobertend 367