270 lines · plain
1! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | FileCheck --ignore-case %s2! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | FileCheck --check-prefix="PARSE-TREE" %s3 4! Check for ORDER([order-modifier :]concurrent) clause on OpenMP constructs5 6subroutine test_do_order()7 integer :: i, j = 18 !CHECK: !$omp do order(concurrent)9 !$omp do order(concurrent)10 do i=1,1011 j = j + 112 end do13 !$omp end do14end subroutine15 16!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct17!PARSE-TREE-NEXT: OmpBeginLoopDirective18!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = do19!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause20!PARSE-TREE-NEXT: Ordering = Concurrent21!PARSE-TREE-NEXT: Flags = {}22 23subroutine test_simd_order_reproducible()24 integer :: i, j = 125 !CHECK: !$omp simd order(reproducible:concurrent)26 !$omp simd order(reproducible:concurrent)27 do i=1,1028 j = j + 129 end do30 !$omp end simd31end subroutine32 33!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct34!PARSE-TREE-NEXT: OmpBeginLoopDirective35!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = simd36!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause37!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Reproducible38!PARSE-TREE-NEXT: Ordering = Concurrent39!PARSE-TREE-NEXT: Flags = {}40 41subroutine test_do_simd_order_unconstrained()42 integer :: i, j = 143 !CHECK: !$omp do simd order(unconstrained:concurrent)44 !$omp do simd order(unconstrained:concurrent)45 do i=1,1046 j = j + 147 end do48 !$omp end do simd49end subroutine50 51!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct52!PARSE-TREE-NEXT: OmpBeginLoopDirective53!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = do simd54!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause55!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Unconstrained56!PARSE-TREE-NEXT: Ordering = Concurrent57!PARSE-TREE-NEXT: Flags = {}58 59subroutine test_parallel_do_order()60 integer :: i, j = 161 !CHECK: !$omp parallel do order(concurrent)62 !$omp parallel do order(concurrent)63 do i=1,1064 j = j + 165 end do66 !$omp end parallel do67end subroutine68 69!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct70!PARSE-TREE-NEXT: OmpBeginLoopDirective71!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel do72!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause73!PARSE-TREE-NEXT: Ordering = Concurrent74!PARSE-TREE-NEXT: Flags = {}75 76subroutine test_parallel_do_simd_order_reproducible()77 integer :: i, j = 178 !CHECK: !$omp parallel do simd order(reproducible:concurrent)79 !$omp parallel do simd order(reproducible:concurrent)80 do i=1,1081 j = j + 182 end do83 !$omp end parallel do simd84end subroutine85 86!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct87!PARSE-TREE-NEXT: OmpBeginLoopDirective88!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel do simd89!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause90!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Reproducible91!PARSE-TREE-NEXT: Ordering = Concurrent92!PARSE-TREE-NEXT: Flags = {}93 94subroutine test_target_simd_order_unconstrained()95 integer :: i, j = 196 !CHECK: !$omp target simd order(unconstrained:concurrent)97 !$omp target simd order(unconstrained:concurrent)98 do i=1,1099 j = j + 1100 end do101 !$omp end target simd102end subroutine103 104!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct105!PARSE-TREE-NEXT: OmpBeginLoopDirective106!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target simd107!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause108!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Unconstrained109!PARSE-TREE-NEXT: Ordering = Concurrent110!PARSE-TREE-NEXT: Flags = {}111 112subroutine test_target_parallel_do_order()113 integer :: i, j = 1114 !CHECK: !$omp target parallel do order(concurrent)115 !$omp target parallel do order(concurrent)116 do i=1,10117 j = j + 1118 end do119 !$omp end target parallel do120end subroutine121 122!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct123!PARSE-TREE-NEXT: OmpBeginLoopDirective124!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target parallel do125!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause126!PARSE-TREE-NEXT: Ordering = Concurrent127!PARSE-TREE-NEXT: Flags = {}128 129subroutine test_target_parallel_do_simd_order_reproducible()130 integer :: i, j = 1131 !CHECK: !$omp target parallel do simd order(reproducible:concurrent)132 !$omp target parallel do simd order(reproducible:concurrent)133 do i=1,10134 j = j + 1135 end do136 !$omp end target parallel do simd137end subroutine138 139!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct140!PARSE-TREE-NEXT: OmpBeginLoopDirective141!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target parallel do simd142!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause143!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Reproducible144!PARSE-TREE-NEXT: Ordering = Concurrent145!PARSE-TREE-NEXT: Flags = {}146 147subroutine test_teams_distribute_simd_order_unconstrained()148 integer :: i, j = 1149 !CHECK: !$omp teams distribute simd order(unconstrained:concurrent)150 !$omp teams distribute simd order(unconstrained:concurrent)151 do i=1,10152 j = j + 1153 end do154 !$omp end teams distribute simd155end subroutine156 157!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct158!PARSE-TREE-NEXT: OmpBeginLoopDirective159!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = teams distribute simd160!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause161!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Unconstrained162!PARSE-TREE-NEXT: Ordering = Concurrent163!PARSE-TREE-NEXT: Flags = {}164 165subroutine test_teams_distribute_parallel_do_order()166 integer :: i, j = 1167 !CHECK: !$omp teams distribute parallel do order(concurrent)168 !$omp teams distribute parallel do order(concurrent)169 do i=1,10170 j = j + 1171 end do172 !$omp end teams distribute parallel do173end subroutine174 175!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct176!PARSE-TREE-NEXT: OmpBeginLoopDirective177!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = teams distribute parallel do178!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause179!PARSE-TREE-NEXT: Ordering = Concurrent180!PARSE-TREE-NEXT: Flags = {}181 182subroutine test_teams_distribute_parallel_do_simd_order_reproducible()183 integer :: i, j = 1184 !CHECK: !$omp teams distribute parallel do simd order(reproducible:concurrent)185 !$omp teams distribute parallel do simd order(reproducible:concurrent)186 do i=1,10187 j = j + 1188 end do189 !$omp end teams distribute parallel do simd190end subroutine191 192!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct193!PARSE-TREE-NEXT: OmpBeginLoopDirective194!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = teams distribute parallel do simd195!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause196!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Reproducible197!PARSE-TREE-NEXT: Ordering = Concurrent198!PARSE-TREE-NEXT: Flags = {}199 200subroutine test_target_teams_distribute_simd_order_unconstrained()201 integer :: i, j = 1202 !CHECK: !$omp target teams distribute simd order(unconstrained:concurrent)203 !$omp target teams distribute simd order(unconstrained:concurrent)204 do i=1,10205 j = j + 1206 end do207 !$omp end target teams distribute simd208end subroutine209 210!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct211!PARSE-TREE-NEXT: OmpBeginLoopDirective212!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target teams distribute simd213!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause214!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Unconstrained215!PARSE-TREE-NEXT: Ordering = Concurrent216!PARSE-TREE-NEXT: Flags = {}217 218subroutine test_target_teams_distribute_parallel_do_order()219 integer :: i, j = 1220 !CHECK: !$omp target teams distribute parallel do order(concurrent)221 !$omp target teams distribute parallel do order(concurrent)222 do i=1,10223 j = j + 1224 end do225 !$omp end target teams distribute parallel do226end subroutine227 228!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct229!PARSE-TREE-NEXT: OmpBeginLoopDirective230!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target teams distribute parallel do231!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause232!PARSE-TREE-NEXT: Ordering = Concurrent233!PARSE-TREE-NEXT: Flags = {}234 235subroutine test_target_teams_distribute_parallel_do_simd_order_reproducible()236 integer :: i, j = 1237 !CHECK: !$omp target teams distribute parallel do simd order(reproducible:concurrent)238 !$omp target teams distribute parallel do simd order(reproducible:concurrent)239 do i=1,10240 j = j + 1241 end do242 !$omp end target teams distribute parallel do simd243end subroutine244 245!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct246!PARSE-TREE-NEXT: OmpBeginLoopDirective247!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target teams distribute parallel do simd248!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause249!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Reproducible250!PARSE-TREE-NEXT: Ordering = Concurrent251!PARSE-TREE-NEXT: Flags = {}252 253subroutine test_taskloop_simd_order_unconstrained()254 integer :: i, j = 1255 !CHECK: !$omp taskloop simd order(unconstrained:concurrent)256 !$omp taskloop simd order(unconstrained:concurrent)257 do i=1,10258 j = j + 1259 end do260 !$omp end taskloop simd261end subroutine262 263!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct264!PARSE-TREE-NEXT: OmpBeginLoopDirective265!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = taskloop simd266!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Order -> OmpOrderClause267!PARSE-TREE-NEXT: OmpOrderModifier -> Value = Unconstrained268!PARSE-TREE-NEXT: Ordering = Concurrent269!PARSE-TREE-NEXT: Flags = {}270