xref: /llvm-project/flang/test/Integration/OpenMP/workshare-scalar-array-assign.f90 (revision 5d38e6e42a90f5d469b5ff9e25e5e8865606776a)
1!===----------------------------------------------------------------------===!
2! This directory can be used to add Integration tests involving multiple
3! stages of the compiler (for eg. from Fortran to LLVM IR). It should not
4! contain executable tests. We should only add tests here sparingly and only
5! if there is no other way to test. Repeat this message in each test that is
6! added to this directory and sub-directories.
7!===----------------------------------------------------------------------===!
8
9!RUN: %flang_fc1 -emit-hlfir -fopenmp -O3 %s -o - | FileCheck %s --check-prefix HLFIR
10!RUN: %flang_fc1 -emit-fir -fopenmp -O3 %s -o - | FileCheck %s --check-prefix FIR
11
12subroutine sb1(a, x)
13  integer :: a
14  integer :: x(:)
15  !$omp parallel workshare
16  x = a
17  !$omp end parallel workshare
18end subroutine
19
20! HLFIR:     omp.parallel {
21! HLFIR:       omp.workshare {
22! HLFIR:         %[[SCALAR:.*]] = fir.load %1#0 : !fir.ref<i32>
23! HLFIR:         hlfir.assign %[[SCALAR]] to
24! HLFIR:         omp.terminator
25! HLFIR:       }
26! HLFIR:       omp.terminator
27! HLFIR:     }
28
29! FIR:     omp.parallel {
30! FIR:       %[[SCALAR_ALLOCA:.*]] = fir.alloca i32
31! FIR:       omp.single copyprivate(%[[SCALAR_ALLOCA]] -> @_workshare_copy_i32 : !fir.ref<i32>) {
32! FIR:         %[[SCALAR_LOAD:.*]] = fir.load %{{.*}} : !fir.ref<i32>
33! FIR:         fir.store %[[SCALAR_LOAD]] to %[[SCALAR_ALLOCA]] : !fir.ref<i32>
34! FIR:         omp.terminator
35! FIR:       }
36! FIR:       %[[SCALAR_RELOAD:.*]] = fir.load %[[SCALAR_ALLOCA]] : !fir.ref<i32>
37! FIR:       %6:3 = fir.box_dims %3, %c0 : (!fir.box<!fir.array<?xi32>>, index) -> (index, index, index)
38! FIR:       omp.wsloop nowait {
39! FIR:         omp.loop_nest (%arg2) : index = (%c1) to (%6#1) inclusive step (%c1) {
40! FIR:           fir.store %[[SCALAR_RELOAD]]
41! FIR:           omp.yield
42! FIR:         }
43! FIR:       }
44! FIR:       omp.barrier
45! FIR:       omp.terminator
46