| ! Test lowering of OpenMP metadirective with construct selectors. |
| |
| ! RUN: %flang_fc1 -fopenmp -emit-hlfir -fopenmp-version=50 %s -o - | FileCheck %s |
| |
| ! CHECK-LABEL: func.func @_QPtest_construct_parallel() |
| ! CHECK: omp.parallel |
| ! CHECK: omp.barrier |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_construct_parallel() |
| !$omp parallel |
| !$omp metadirective & |
| !$omp & when(construct={parallel}: barrier) & |
| !$omp & default(nothing) |
| !$omp end parallel |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_construct_no_match() |
| ! CHECK: omp.parallel |
| ! CHECK-NOT: omp.barrier |
| ! CHECK: omp.taskyield |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_construct_no_match() |
| !$omp parallel |
| !$omp metadirective & |
| !$omp & when(construct={target}: barrier) & |
| !$omp & default(taskyield) |
| !$omp end parallel |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_construct_for( |
| ! CHECK: omp.wsloop |
| ! CHECK-NOT: omp.taskyield |
| ! CHECK: return |
| subroutine test_construct_for(n) |
| integer :: i, n |
| !$omp do |
| do i = 1, n |
| !$omp metadirective & |
| !$omp & when(construct={for}: nothing) & |
| !$omp & default(taskyield) |
| end do |
| !$omp end do |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_begin_construct_parallel() |
| ! CHECK: omp.parallel |
| ! CHECK: omp.parallel |
| ! CHECK: omp.terminator |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_begin_construct_parallel() |
| integer :: x |
| x = 0 |
| !$omp parallel |
| !$omp begin metadirective & |
| !$omp & when(construct={parallel}: parallel) |
| x = 1 |
| !$omp end metadirective |
| !$omp end parallel |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_begin_construct_no_match() |
| ! CHECK: omp.parallel |
| ! CHECK-NOT: omp.task |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_begin_construct_no_match() |
| integer :: x |
| x = 0 |
| !$omp parallel |
| !$omp begin metadirective & |
| !$omp & when(construct={target}: task) |
| x = 1 |
| !$omp end metadirective |
| !$omp end parallel |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_begin_construct_selected_parent() |
| ! CHECK: omp.target |
| ! CHECK: omp.parallel |
| ! CHECK: omp.barrier |
| ! CHECK-NOT: omp.taskyield |
| ! CHECK: omp.terminator |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_begin_construct_selected_parent() |
| !$omp target |
| !$omp begin metadirective & |
| !$omp & when(implementation={vendor(llvm)}: parallel) |
| !$omp metadirective & |
| !$omp & when(construct={target, parallel}: barrier) & |
| !$omp & default(taskyield) |
| !$omp end metadirective |
| !$omp end target |
| end subroutine |
| |
| ! CHECK-LABEL: func.func @_QPtest_construct_combined_directive( |
| ! CHECK: omp.target |
| ! CHECK: omp.parallel |
| ! CHECK-NOT: omp.taskyield |
| ! CHECK: omp.barrier |
| ! CHECK: omp.terminator |
| ! CHECK: omp.terminator |
| ! CHECK: return |
| subroutine test_construct_combined_directive() |
| !$omp target |
| !$omp parallel |
| !$omp metadirective & |
| !$omp & when(construct={parallel}: taskyield) & |
| !$omp & when(construct={target parallel}: barrier) & |
| !$omp & default(nothing) |
| !$omp end parallel |
| !$omp end target |
| end subroutine |