269 lines · plain
1! This test checks lowering of OpenMP compound (combined and composite) loop2! constructs.3 4! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s5! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s6 7program main8 integer :: i,j9 10 ! TODO When composite constructs are supported add:11 ! - TASKLOOP SIMD12 13 ! ----------------------------------------------------------------------------14 ! DISTRIBUTE PARALLEL DO15 ! ----------------------------------------------------------------------------16 !$omp teams17 18 ! CHECK: omp.parallel19 ! CHECK: omp.distribute20 ! CHECK-NEXT: omp.wsloop21 ! CHECK-NEXT: omp.loop_nest22 !$omp distribute parallel do23 do i = 1, 1024 end do25 !$omp end distribute parallel do26 27 !$omp end teams28 29 ! ----------------------------------------------------------------------------30 ! DISTRIBUTE PARALLEL DO SIMD31 ! ----------------------------------------------------------------------------32 !$omp teams33 34 ! CHECK: omp.parallel35 ! CHECK: omp.distribute36 ! CHECK-NEXT: omp.wsloop37 ! CHECK-NEXT: omp.simd38 ! CHECK-NEXT: omp.loop_nest39 !$omp distribute parallel do simd40 do i = 1, 1041 end do42 !$omp end distribute parallel do simd43 44 !$omp end teams45 46 ! ----------------------------------------------------------------------------47 ! DISTRIBUTE SIMD48 ! ----------------------------------------------------------------------------49 !$omp teams50 51 ! CHECK: omp.distribute52 ! CHECK-NEXT: omp.simd53 ! CHECK-NEXT: omp.loop_nest54 !$omp distribute simd55 do i = 1, 1056 end do57 !$omp end distribute simd58 59 !$omp end teams60 61 ! ----------------------------------------------------------------------------62 ! DO SIMD63 ! ----------------------------------------------------------------------------64 ! CHECK: omp.wsloop65 ! CHECK-NEXT: omp.simd66 ! CHECK-NEXT: omp.loop_nest67 !$omp do simd68 do i = 1, 1069 end do70 !$omp end do simd71 72 ! ----------------------------------------------------------------------------73 ! PARALLEL DO SIMD74 ! ----------------------------------------------------------------------------75 ! CHECK: omp.parallel76 ! CHECK: omp.wsloop77 ! CHECK-NEXT: omp.simd78 ! CHECK-NEXT: omp.loop_nest79 !$omp parallel do simd80 do i = 1, 1081 end do82 !$omp end parallel do simd83 84 ! ----------------------------------------------------------------------------85 ! PARALLEL DO86 ! ----------------------------------------------------------------------------87 ! CHECK: omp.parallel88 ! CHECK: omp.wsloop89 ! CHECK-NEXT: omp.loop_nest90 !$omp parallel do91 do i = 1, 1092 end do93 !$omp end parallel do94 95 ! ----------------------------------------------------------------------------96 ! TARGET PARALLEL DO SIMD97 ! ----------------------------------------------------------------------------98 ! CHECK: omp.target99 ! CHECK: omp.parallel100 ! CHECK: omp.wsloop101 ! CHECK-NEXT: omp.simd102 ! CHECK-NEXT: omp.loop_nest103 !$omp target parallel do simd104 do i = 1, 10105 end do106 !$omp end target parallel do simd107 108 ! ----------------------------------------------------------------------------109 ! TARGET PARALLEL DO110 ! ----------------------------------------------------------------------------111 ! CHECK: omp.target112 ! CHECK: omp.parallel113 ! CHECK: omp.wsloop114 ! CHECK-NEXT: omp.loop_nest115 !$omp target parallel do116 do i = 1, 10117 end do118 !$omp end target parallel do119 120 ! ----------------------------------------------------------------------------121 ! TARGET SIMD122 ! ----------------------------------------------------------------------------123 ! CHECK: omp.target124 ! CHECK: omp.simd125 ! CHECK-NEXT: omp.loop_nest126 !$omp target simd127 do i = 1, 10128 end do129 !$omp end target simd130 131 ! ----------------------------------------------------------------------------132 ! TARGET TEAMS DISTRIBUTE133 ! ----------------------------------------------------------------------------134 ! CHECK: omp.target135 ! CHECK: omp.teams136 ! CHECK: omp.distribute137 ! CHECK-NEXT: omp.loop_nest138 !$omp target teams distribute139 do i = 1, 10140 end do141 !$omp end target teams distribute142 143 ! ----------------------------------------------------------------------------144 ! TARGET TEAMS DISTRIBUTE PARALLEL DO145 ! ----------------------------------------------------------------------------146 ! CHECK: omp.target147 ! CHECK: omp.teams148 ! CHECK: omp.parallel149 ! CHECK: omp.distribute150 ! CHECK-NEXT: omp.wsloop151 ! CHECK-NEXT: omp.loop_nest152 !$omp target teams distribute parallel do153 do i = 1, 10154 end do155 !$omp end target teams distribute parallel do156 157 ! ----------------------------------------------------------------------------158 ! TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD159 ! ----------------------------------------------------------------------------160 ! CHECK: omp.target161 ! CHECK: omp.teams162 ! CHECK: omp.parallel163 ! CHECK: omp.distribute164 ! CHECK-NEXT: omp.wsloop165 ! CHECK-NEXT: omp.simd166 ! CHECK-NEXT: omp.loop_nest167 !$omp target teams distribute parallel do simd168 do i = 1, 10169 end do170 !$omp end target teams distribute parallel do simd171 172 ! ----------------------------------------------------------------------------173 ! TARGET TEAMS DISTRIBUTE SIMD174 ! ----------------------------------------------------------------------------175 ! CHECK: omp.target176 ! CHECK: omp.teams177 ! CHECK: omp.distribute178 ! CHECK-NEXT: omp.simd179 ! CHECK-NEXT: omp.loop_nest180 !$omp target teams distribute simd181 do i = 1, 10182 end do183 !$omp end target teams distribute simd184 185 ! ----------------------------------------------------------------------------186 ! TEAMS DISTRIBUTE187 ! ----------------------------------------------------------------------------188 ! CHECK: omp.teams189 ! CHECK: omp.distribute190 ! CHECK-NEXT: omp.loop_nest191 !$omp teams distribute192 do i = 1, 10193 end do194 !$omp end teams distribute195 196 ! ----------------------------------------------------------------------------197 ! TEAMS DISTRIBUTE PARALLEL DO198 ! ----------------------------------------------------------------------------199 ! CHECK: omp.teams200 ! CHECK: omp.parallel201 ! CHECK: omp.distribute202 ! CHECK-NEXT: omp.wsloop203 ! CHECK-NEXT: omp.loop_nest204 !$omp teams distribute parallel do205 do i = 1, 10206 end do207 !$omp end teams distribute parallel do208 209 ! ----------------------------------------------------------------------------210 ! TEAMS DISTRIBUTE PARALLEL DO SIMD211 ! ----------------------------------------------------------------------------212 ! CHECK: omp.teams213 ! CHECK: omp.parallel214 ! CHECK: omp.distribute215 ! CHECK-NEXT: omp.wsloop216 ! CHECK-NEXT: omp.simd217 ! CHECK-NEXT: omp.loop_nest218 !$omp teams distribute parallel do simd219 do i = 1, 10220 end do221 !$omp end teams distribute parallel do simd222 223 ! ----------------------------------------------------------------------------224 ! TEAMS DISTRIBUTE SIMD225 ! ----------------------------------------------------------------------------226 ! CHECK: omp.teams227 ! CHECK: omp.distribute228 ! CHECK-NEXT: omp.simd229 ! CHECK-NEXT: omp.loop_nest230 !$omp teams distribute simd231 do i = 1, 10232 end do233 !$omp end teams distribute simd234 235 ! ----------------------------------------------------------------------------236 ! Unstructured control-flow in loop237 ! ----------------------------------------------------------------------------238 ! CHECK: omp.target239 ! CHECK: omp.teams240 ! CHECK: omp.parallel241 ! CHECK: omp.distribute242 ! CHECK-NEXT: omp.wsloop243 ! CHECK-NEXT: omp.loop_nest244 !245 ! Verify the conrol-flow of the unstructured inner loop.246 ! CHECK: cf.br ^[[BB1:.*]]247 ! CHECK: ^[[BB1]]:248 ! CHECK: cf.br ^[[BB2:.*]]249 ! CHECK: ^[[BB2]]:250 ! CHECK: cf.cond_br %{{.*}}, ^[[BB3:.*]], ^[[BB6:.*]]251 ! CHECK: ^[[BB3]]:252 ! CHECK: cf.cond_br %{{.*}}, ^[[BB4:.*]], ^[[BB5:.*]]253 ! CHECK: ^[[BB4]]:254 ! CHECK: cf.br ^[[BB6]]255 ! CHECK: ^[[BB5]]:256 ! CHECK: cf.br ^[[BB2]]257 ! CHECK: ^[[BB6]]:258 ! CHECK-NEXT: omp.yield259 !$omp target teams distribute parallel do260 do i = 1, 10261 outerloop: do j = i-1, i+i262 if (j == i) then263 exit outerloop264 end if265 end do outerloop266 end do267 !$omp end target teams distribute parallel do268end program main269