1d62ff719SSergio Afonso! This test checks lowering of OpenMP compound (combined and composite) loop 2d62ff719SSergio Afonso! constructs. 3d62ff719SSergio Afonso 4d62ff719SSergio Afonso! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s 5d62ff719SSergio Afonso! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s 6d62ff719SSergio Afonso 7d62ff719SSergio Afonsoprogram main 8*2f245875SKareem Ergawy integer :: i,j 9d62ff719SSergio Afonso 10d62ff719SSergio Afonso ! TODO When composite constructs are supported add: 11d62ff719SSergio Afonso ! - TASKLOOP SIMD 12918ac629SSergio Afonso 13918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 149c8ce5faSSergio Afonso ! DISTRIBUTE PARALLEL DO 159c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 169c8ce5faSSergio Afonso !$omp teams 179c8ce5faSSergio Afonso 189c8ce5faSSergio Afonso ! CHECK: omp.parallel 199c8ce5faSSergio Afonso ! CHECK: omp.distribute 209c8ce5faSSergio Afonso ! CHECK-NEXT: omp.wsloop 219c8ce5faSSergio Afonso ! CHECK-NEXT: omp.loop_nest 229c8ce5faSSergio Afonso !$omp distribute parallel do 239c8ce5faSSergio Afonso do i = 1, 10 249c8ce5faSSergio Afonso end do 259c8ce5faSSergio Afonso !$omp end distribute parallel do 269c8ce5faSSergio Afonso 279c8ce5faSSergio Afonso !$omp end teams 289c8ce5faSSergio Afonso 299c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 3057726c44SSergio Afonso ! DISTRIBUTE PARALLEL DO SIMD 3157726c44SSergio Afonso ! ---------------------------------------------------------------------------- 3257726c44SSergio Afonso !$omp teams 3357726c44SSergio Afonso 3457726c44SSergio Afonso ! CHECK: omp.parallel 3557726c44SSergio Afonso ! CHECK: omp.distribute 3657726c44SSergio Afonso ! CHECK-NEXT: omp.wsloop 3757726c44SSergio Afonso ! CHECK-NEXT: omp.simd 3857726c44SSergio Afonso ! CHECK-NEXT: omp.loop_nest 3957726c44SSergio Afonso !$omp distribute parallel do simd 4057726c44SSergio Afonso do i = 1, 10 4157726c44SSergio Afonso end do 4257726c44SSergio Afonso !$omp end distribute parallel do simd 4357726c44SSergio Afonso 4457726c44SSergio Afonso !$omp end teams 4557726c44SSergio Afonso 4657726c44SSergio Afonso ! ---------------------------------------------------------------------------- 47918ac629SSergio Afonso ! DISTRIBUTE SIMD 48918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 49918ac629SSergio Afonso !$omp teams 50918ac629SSergio Afonso 51918ac629SSergio Afonso ! CHECK: omp.distribute 52918ac629SSergio Afonso ! CHECK-NEXT: omp.simd 53918ac629SSergio Afonso ! CHECK-NEXT: omp.loop_nest 54918ac629SSergio Afonso !$omp distribute simd 55918ac629SSergio Afonso do i = 1, 10 56918ac629SSergio Afonso end do 57918ac629SSergio Afonso !$omp end distribute simd 58918ac629SSergio Afonso 59918ac629SSergio Afonso !$omp end teams 60d62ff719SSergio Afonso 61d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 62d62ff719SSergio Afonso ! DO SIMD 63d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 64d62ff719SSergio Afonso ! CHECK: omp.wsloop 6552d2d820SSergio Afonso ! CHECK-NEXT: omp.simd 66d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 67d62ff719SSergio Afonso !$omp do simd 68d62ff719SSergio Afonso do i = 1, 10 69d62ff719SSergio Afonso end do 70d62ff719SSergio Afonso !$omp end do simd 71d62ff719SSergio Afonso 72d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 73d62ff719SSergio Afonso ! PARALLEL DO SIMD 74d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 75d62ff719SSergio Afonso ! CHECK: omp.parallel 76d62ff719SSergio Afonso ! CHECK: omp.wsloop 7752d2d820SSergio Afonso ! CHECK-NEXT: omp.simd 78d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 79d62ff719SSergio Afonso !$omp parallel do simd 80d62ff719SSergio Afonso do i = 1, 10 81d62ff719SSergio Afonso end do 82d62ff719SSergio Afonso !$omp end parallel do simd 83d62ff719SSergio Afonso 84d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 85d62ff719SSergio Afonso ! PARALLEL DO 86d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 87d62ff719SSergio Afonso ! CHECK: omp.parallel 88d62ff719SSergio Afonso ! CHECK: omp.wsloop 89d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 90d62ff719SSergio Afonso !$omp parallel do 91d62ff719SSergio Afonso do i = 1, 10 92d62ff719SSergio Afonso end do 93d62ff719SSergio Afonso !$omp end parallel do 94d62ff719SSergio Afonso 95d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 96d62ff719SSergio Afonso ! TARGET PARALLEL DO SIMD 97d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 98d62ff719SSergio Afonso ! CHECK: omp.target 99d62ff719SSergio Afonso ! CHECK: omp.parallel 100d62ff719SSergio Afonso ! CHECK: omp.wsloop 10152d2d820SSergio Afonso ! CHECK-NEXT: omp.simd 102d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 103d62ff719SSergio Afonso !$omp target parallel do simd 104d62ff719SSergio Afonso do i = 1, 10 105d62ff719SSergio Afonso end do 106d62ff719SSergio Afonso !$omp end target parallel do simd 107d62ff719SSergio Afonso 108d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 109d62ff719SSergio Afonso ! TARGET PARALLEL DO 110d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 111d62ff719SSergio Afonso ! CHECK: omp.target 112d62ff719SSergio Afonso ! CHECK: omp.parallel 113d62ff719SSergio Afonso ! CHECK: omp.wsloop 114d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 115d62ff719SSergio Afonso !$omp target parallel do 116d62ff719SSergio Afonso do i = 1, 10 117d62ff719SSergio Afonso end do 118d62ff719SSergio Afonso !$omp end target parallel do 119d62ff719SSergio Afonso 120d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 121d62ff719SSergio Afonso ! TARGET SIMD 122d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 123d62ff719SSergio Afonso ! CHECK: omp.target 124d62ff719SSergio Afonso ! CHECK: omp.simd 125d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 126d62ff719SSergio Afonso !$omp target simd 127d62ff719SSergio Afonso do i = 1, 10 128d62ff719SSergio Afonso end do 129d62ff719SSergio Afonso !$omp end target simd 130d62ff719SSergio Afonso 131d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 132d62ff719SSergio Afonso ! TARGET TEAMS DISTRIBUTE 133d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 134d62ff719SSergio Afonso ! CHECK: omp.target 135d62ff719SSergio Afonso ! CHECK: omp.teams 136d62ff719SSergio Afonso ! CHECK: omp.distribute 137d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 138d62ff719SSergio Afonso !$omp target teams distribute 139d62ff719SSergio Afonso do i = 1, 10 140d62ff719SSergio Afonso end do 141d62ff719SSergio Afonso !$omp end target teams distribute 142d62ff719SSergio Afonso 143d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 1449c8ce5faSSergio Afonso ! TARGET TEAMS DISTRIBUTE PARALLEL DO 1459c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 1469c8ce5faSSergio Afonso ! CHECK: omp.target 1479c8ce5faSSergio Afonso ! CHECK: omp.teams 1489c8ce5faSSergio Afonso ! CHECK: omp.parallel 1499c8ce5faSSergio Afonso ! CHECK: omp.distribute 1509c8ce5faSSergio Afonso ! CHECK-NEXT: omp.wsloop 1519c8ce5faSSergio Afonso ! CHECK-NEXT: omp.loop_nest 1529c8ce5faSSergio Afonso !$omp target teams distribute parallel do 1539c8ce5faSSergio Afonso do i = 1, 10 1549c8ce5faSSergio Afonso end do 1559c8ce5faSSergio Afonso !$omp end target teams distribute parallel do 1569c8ce5faSSergio Afonso 1579c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 15857726c44SSergio Afonso ! TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD 15957726c44SSergio Afonso ! ---------------------------------------------------------------------------- 16057726c44SSergio Afonso ! CHECK: omp.target 16157726c44SSergio Afonso ! CHECK: omp.teams 16257726c44SSergio Afonso ! CHECK: omp.parallel 16357726c44SSergio Afonso ! CHECK: omp.distribute 16457726c44SSergio Afonso ! CHECK-NEXT: omp.wsloop 16557726c44SSergio Afonso ! CHECK-NEXT: omp.simd 16657726c44SSergio Afonso ! CHECK-NEXT: omp.loop_nest 16757726c44SSergio Afonso !$omp target teams distribute parallel do simd 16857726c44SSergio Afonso do i = 1, 10 16957726c44SSergio Afonso end do 17057726c44SSergio Afonso !$omp end target teams distribute parallel do simd 17157726c44SSergio Afonso 17257726c44SSergio Afonso ! ---------------------------------------------------------------------------- 173918ac629SSergio Afonso ! TARGET TEAMS DISTRIBUTE SIMD 174918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 175918ac629SSergio Afonso ! CHECK: omp.target 176918ac629SSergio Afonso ! CHECK: omp.teams 177918ac629SSergio Afonso ! CHECK: omp.distribute 178918ac629SSergio Afonso ! CHECK-NEXT: omp.simd 179918ac629SSergio Afonso ! CHECK-NEXT: omp.loop_nest 180918ac629SSergio Afonso !$omp target teams distribute simd 181918ac629SSergio Afonso do i = 1, 10 182918ac629SSergio Afonso end do 183918ac629SSergio Afonso !$omp end target teams distribute simd 184918ac629SSergio Afonso 185918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 186d62ff719SSergio Afonso ! TEAMS DISTRIBUTE 187d62ff719SSergio Afonso ! ---------------------------------------------------------------------------- 188d62ff719SSergio Afonso ! CHECK: omp.teams 189d62ff719SSergio Afonso ! CHECK: omp.distribute 190d62ff719SSergio Afonso ! CHECK-NEXT: omp.loop_nest 191d62ff719SSergio Afonso !$omp teams distribute 192d62ff719SSergio Afonso do i = 1, 10 193d62ff719SSergio Afonso end do 194d62ff719SSergio Afonso !$omp end teams distribute 195918ac629SSergio Afonso 196918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 1979c8ce5faSSergio Afonso ! TEAMS DISTRIBUTE PARALLEL DO 1989c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 1999c8ce5faSSergio Afonso ! CHECK: omp.teams 2009c8ce5faSSergio Afonso ! CHECK: omp.parallel 2019c8ce5faSSergio Afonso ! CHECK: omp.distribute 2029c8ce5faSSergio Afonso ! CHECK-NEXT: omp.wsloop 2039c8ce5faSSergio Afonso ! CHECK-NEXT: omp.loop_nest 2049c8ce5faSSergio Afonso !$omp teams distribute parallel do 2059c8ce5faSSergio Afonso do i = 1, 10 2069c8ce5faSSergio Afonso end do 2079c8ce5faSSergio Afonso !$omp end teams distribute parallel do 2089c8ce5faSSergio Afonso 2099c8ce5faSSergio Afonso ! ---------------------------------------------------------------------------- 21057726c44SSergio Afonso ! TEAMS DISTRIBUTE PARALLEL DO SIMD 21157726c44SSergio Afonso ! ---------------------------------------------------------------------------- 21257726c44SSergio Afonso ! CHECK: omp.teams 21357726c44SSergio Afonso ! CHECK: omp.parallel 21457726c44SSergio Afonso ! CHECK: omp.distribute 21557726c44SSergio Afonso ! CHECK-NEXT: omp.wsloop 21657726c44SSergio Afonso ! CHECK-NEXT: omp.simd 21757726c44SSergio Afonso ! CHECK-NEXT: omp.loop_nest 21857726c44SSergio Afonso !$omp teams distribute parallel do simd 21957726c44SSergio Afonso do i = 1, 10 22057726c44SSergio Afonso end do 22157726c44SSergio Afonso !$omp end teams distribute parallel do simd 22257726c44SSergio Afonso 22357726c44SSergio Afonso ! ---------------------------------------------------------------------------- 224918ac629SSergio Afonso ! TEAMS DISTRIBUTE SIMD 225918ac629SSergio Afonso ! ---------------------------------------------------------------------------- 226918ac629SSergio Afonso ! CHECK: omp.teams 227918ac629SSergio Afonso ! CHECK: omp.distribute 228918ac629SSergio Afonso ! CHECK-NEXT: omp.simd 229918ac629SSergio Afonso ! CHECK-NEXT: omp.loop_nest 230918ac629SSergio Afonso !$omp teams distribute simd 231918ac629SSergio Afonso do i = 1, 10 232918ac629SSergio Afonso end do 233918ac629SSergio Afonso !$omp end teams distribute simd 234*2f245875SKareem Ergawy 235*2f245875SKareem Ergawy ! ---------------------------------------------------------------------------- 236*2f245875SKareem Ergawy ! Unstructured control-flow in loop 237*2f245875SKareem Ergawy ! ---------------------------------------------------------------------------- 238*2f245875SKareem Ergawy ! CHECK: omp.target 239*2f245875SKareem Ergawy ! CHECK: omp.teams 240*2f245875SKareem Ergawy ! CHECK: omp.parallel 241*2f245875SKareem Ergawy ! CHECK: omp.distribute 242*2f245875SKareem Ergawy ! CHECK-NEXT: omp.wsloop 243*2f245875SKareem Ergawy ! CHECK-NEXT: omp.loop_nest 244*2f245875SKareem Ergawy ! 245*2f245875SKareem Ergawy ! Verify the conrol-flow of the unstructured inner loop. 246*2f245875SKareem Ergawy ! CHECK: cf.br ^[[BB1:.*]] 247*2f245875SKareem Ergawy ! CHECK: ^[[BB1]]: 248*2f245875SKareem Ergawy ! CHECK: cf.br ^[[BB2:.*]] 249*2f245875SKareem Ergawy ! CHECK: ^[[BB2]]: 250*2f245875SKareem Ergawy ! CHECK: cf.cond_br %{{.*}}, ^[[BB3:.*]], ^[[BB6:.*]] 251*2f245875SKareem Ergawy ! CHECK: ^[[BB3]]: 252*2f245875SKareem Ergawy ! CHECK: cf.cond_br %{{.*}}, ^[[BB4:.*]], ^[[BB5:.*]] 253*2f245875SKareem Ergawy ! CHECK: ^[[BB4]]: 254*2f245875SKareem Ergawy ! CHECK: cf.br ^[[BB6]] 255*2f245875SKareem Ergawy ! CHECK: ^[[BB5]]: 256*2f245875SKareem Ergawy ! CHECK: cf.br ^[[BB2]] 257*2f245875SKareem Ergawy ! CHECK: ^[[BB6]]: 258*2f245875SKareem Ergawy ! CHECK-NEXT: omp.yield 259*2f245875SKareem Ergawy !$omp target teams distribute parallel do 260*2f245875SKareem Ergawy do i = 1, 10 261*2f245875SKareem Ergawy outerloop: do j = i-1, i+i 262*2f245875SKareem Ergawy if (j == i) then 263*2f245875SKareem Ergawy exit outerloop 264*2f245875SKareem Ergawy end if 265*2f245875SKareem Ergawy end do outerloop 266*2f245875SKareem Ergawy end do 267*2f245875SKareem Ergawy !$omp end target teams distribute parallel do 268d62ff719SSergio Afonsoend program main 269