llvm/flang/test/Driver/omp-cse-region-boundary.f90

!This test checks that when compiling an OpenMP program for the target device
!CSE is not done across target op region boundaries. It also checks that when
!compiling for the host CSE is done.
!RUN: %flang_fc1 -fopenmp-is-target-device -emit-mlir -fopenmp %s -o - | fir-opt -cse | FileCheck %s -check-prefix=CHECK-DEVICE
!RUN: %flang_fc1 -emit-mlir -fopenmp %s -o - | fir-opt -cse | FileCheck %s -check-prefix=CHECK-HOST
!RUN: bbc -fopenmp-is-target-device -emit-fir -fopenmp %s -o - | fir-opt -cse | FileCheck %s -check-prefix=CHECK-DEVICE
!RUN: bbc -emit-fir -fopenmp %s -o - | fir-opt -cse | FileCheck %s -check-prefix=CHECK-HOST

!Constant should be present inside target region.
!CHECK-DEVICE: omp.target
!CHECK-DEVICE: arith.constant 10
!CHECK-DEVICE: omp.terminator

!Constant should not be present inside target region.
!CHECK-HOST: omp.target
!CHECK-NOT-HOST: arith.constant 10
!CHECK-HOST: omp.terminator

subroutine writeIndex(sum)
        integer :: sum
        integer :: myconst1
        integer :: myconst2
        myconst1 = 10
!$omp target map(from:myconst2)
        myconst2 = 10
!$omp end target
        sum = myconst2 + myconst2
end subroutine writeIndex