xref: /llvm-project/flang/test/Integration/OpenMP/workshare-scalar-array-mul.f90 (revision 5d38e6e42a90f5d469b5ff9e25e5e8865606776a)
1*5d38e6e4SIvan R. Ivanov!===----------------------------------------------------------------------===!
2*5d38e6e4SIvan R. Ivanov! This directory can be used to add Integration tests involving multiple
3*5d38e6e4SIvan R. Ivanov! stages of the compiler (for eg. from Fortran to LLVM IR). It should not
4*5d38e6e4SIvan R. Ivanov! contain executable tests. We should only add tests here sparingly and only
5*5d38e6e4SIvan R. Ivanov! if there is no other way to test. Repeat this message in each test that is
6*5d38e6e4SIvan R. Ivanov! added to this directory and sub-directories.
7*5d38e6e4SIvan R. Ivanov!===----------------------------------------------------------------------===!
8*5d38e6e4SIvan R. Ivanov
9*5d38e6e4SIvan R. Ivanov!RUN: %flang_fc1 -emit-hlfir -fopenmp -O3 %s -o - | FileCheck %s --check-prefix HLFIR-O3
10*5d38e6e4SIvan R. Ivanov!RUN: %flang_fc1 -emit-fir -fopenmp -O3 %s -o - | FileCheck %s --check-prefix FIR-O3
11*5d38e6e4SIvan R. Ivanov
12*5d38e6e4SIvan R. Ivanov!RUN: %flang_fc1 -emit-hlfir -fopenmp -O0 %s -o - | FileCheck %s --check-prefix HLFIR-O0
13*5d38e6e4SIvan R. Ivanov!RUN: %flang_fc1 -emit-fir -fopenmp -O0 %s -o - | FileCheck %s --check-prefix FIR-O0
14*5d38e6e4SIvan R. Ivanov
15*5d38e6e4SIvan R. Ivanovprogram test
16*5d38e6e4SIvan R. Ivanov  real :: arr_01(10)
17*5d38e6e4SIvan R. Ivanov  !$omp parallel workshare
18*5d38e6e4SIvan R. Ivanov    arr_01 = arr_01*2
19*5d38e6e4SIvan R. Ivanov  !$omp end parallel workshare
20*5d38e6e4SIvan R. Ivanovend program
21*5d38e6e4SIvan R. Ivanov
22*5d38e6e4SIvan R. Ivanov! HLFIR-O3:    omp.parallel {
23*5d38e6e4SIvan R. Ivanov! HLFIR-O3:      omp.workshare {
24*5d38e6e4SIvan R. Ivanov! HLFIR-O3:        hlfir.elemental
25*5d38e6e4SIvan R. Ivanov! HLFIR-O3:        hlfir.assign
26*5d38e6e4SIvan R. Ivanov! HLFIR-O3:        hlfir.destroy
27*5d38e6e4SIvan R. Ivanov! HLFIR-O3:        omp.terminator
28*5d38e6e4SIvan R. Ivanov! HLFIR-O3:      omp.terminator
29*5d38e6e4SIvan R. Ivanov
30*5d38e6e4SIvan R. Ivanov! FIR-O3:    omp.parallel {
31*5d38e6e4SIvan R. Ivanov! FIR-O3:      omp.wsloop nowait {
32*5d38e6e4SIvan R. Ivanov! FIR-O3:        omp.loop_nest
33*5d38e6e4SIvan R. Ivanov! FIR-O3:      omp.barrier
34*5d38e6e4SIvan R. Ivanov! FIR-O3:      omp.terminator
35*5d38e6e4SIvan R. Ivanov
36*5d38e6e4SIvan R. Ivanov! HLFIR-O0:    omp.parallel {
37*5d38e6e4SIvan R. Ivanov! HLFIR-O0:      omp.workshare {
38*5d38e6e4SIvan R. Ivanov! HLFIR-O0:        hlfir.elemental
39*5d38e6e4SIvan R. Ivanov! HLFIR-O0:        hlfir.assign
40*5d38e6e4SIvan R. Ivanov! HLFIR-O0:        hlfir.destroy
41*5d38e6e4SIvan R. Ivanov! HLFIR-O0:        omp.terminator
42*5d38e6e4SIvan R. Ivanov! HLFIR-O0:      omp.terminator
43*5d38e6e4SIvan R. Ivanov
44*5d38e6e4SIvan R. Ivanov! Check the copyprivate copy function
45*5d38e6e4SIvan R. Ivanov! FIR-O0:  func.func private @_workshare_copy_heap_{{.*}}(%[[DST:.*]]: {{.*}}, %[[SRC:.*]]: {{.*}})
46*5d38e6e4SIvan R. Ivanov! FIR-O0:    fir.load %[[SRC]]
47*5d38e6e4SIvan R. Ivanov! FIR-O0:    fir.store {{.*}} to %[[DST]]
48*5d38e6e4SIvan R. Ivanov
49*5d38e6e4SIvan R. Ivanov! Check that we properly handle the temporary array
50*5d38e6e4SIvan R. Ivanov! FIR-O0:    omp.parallel {
51*5d38e6e4SIvan R. Ivanov! FIR-O0:      %[[CP:.*]] = fir.alloca !fir.heap<!fir.array<10xf32>>
52*5d38e6e4SIvan R. Ivanov! FIR-O0:      omp.single copyprivate(%[[CP]] -> @_workshare_copy_heap_
53*5d38e6e4SIvan R. Ivanov! FIR-O0:        fir.allocmem
54*5d38e6e4SIvan R. Ivanov! FIR-O0:        fir.store
55*5d38e6e4SIvan R. Ivanov! FIR-O0:        omp.terminator
56*5d38e6e4SIvan R. Ivanov! FIR-O0:      fir.load %[[CP]]
57*5d38e6e4SIvan R. Ivanov! FIR-O0:      omp.wsloop {
58*5d38e6e4SIvan R. Ivanov! FIR-O0:        omp.loop_nest
59*5d38e6e4SIvan R. Ivanov! FIR-O0:          omp.yield
60*5d38e6e4SIvan R. Ivanov! FIR-O0:      omp.single nowait {
61*5d38e6e4SIvan R. Ivanov! FIR-O0:        fir.call @_FortranAAssign
62*5d38e6e4SIvan R. Ivanov! FIR-O0:        fir.freemem
63*5d38e6e4SIvan R. Ivanov! FIR-O0:        omp.terminator
64*5d38e6e4SIvan R. Ivanov! FIR-O0:      omp.barrier
65*5d38e6e4SIvan R. Ivanov! FIR-O0:      omp.terminator
66