| ! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | \ | |
| ! RUN: FileCheck --ignore-case %s | |
| ! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | \ | |
| ! RUN: FileCheck --check-prefix="PARSE-TREE" %s | |
| ! Check for parsing of parallel loop combined construct (OpenMP 5.0, 2.13.2) | |
| subroutine test_parallel_loop | |
| integer :: i, j = 1 | |
| !PARSE-TREE: OmpBeginDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp parallel loop | |
| !$omp parallel loop | |
| do i=1,10 | |
| j = j + 1 | |
| end do | |
| end subroutine | |
| subroutine test_parallel_loop_with_end | |
| integer :: i, j = 1 | |
| !PARSE-TREE: OmpBeginDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp parallel loop | |
| !$omp parallel loop | |
| do i=1,10 | |
| j = j + 1 | |
| end do | |
| !PARSE-TREE: OmpEndDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp end parallel loop | |
| !$omp end parallel loop | |
| end subroutine | |
| subroutine test_parallel_loop_with_clauses | |
| integer :: i, j = 1 | |
| !PARSE-TREE: OmpBeginDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp parallel loop num_threads(4_4) collapse(1_4) private(j) default(shared) | |
| !$omp parallel loop num_threads(4) collapse(1) private(j) default(shared) | |
| do i=1,10 | |
| j = j + 1 | |
| end do | |
| end subroutine | |
| subroutine test_parallel_loop_with_reduction | |
| integer :: i, total | |
| total = 0 | |
| !PARSE-TREE: OmpBeginDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp parallel loop reduction(+: total) | |
| !$omp parallel loop reduction(+:total) | |
| do i=1,10 | |
| total = total + i | |
| end do | |
| end subroutine | |
| subroutine test_parallel_loop_with_if | |
| integer :: i, j = 1 | |
| logical :: cond | |
| cond = .true. | |
| !PARSE-TREE: OmpBeginDirective | |
| !PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel loop | |
| !CHECK: !$omp parallel loop if(cond) proc_bind(close) | |
| !$omp parallel loop if(cond) proc_bind(close) | |
| do i=1,10 | |
| j = j + 1 | |
| end do | |
| end subroutine |