brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 48ad553 Raw
121 lines · plain
1! RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s2! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s3 4! --- Check that with shared(i) the variable outside the parallel section5! --- is updated. 6! CHECK-LABEL:  func.func @_QPomploop()7! CHECK:    %[[ALLOC_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFomploopEi"}8! CHECK:    %[[DECL_I:.*]]:2 = hlfir.declare %[[ALLOC_I]] {uniq_name = "_QFomploopEi"} :9! CHECK:    omp.parallel {10! CHECK:      omp.sections {11! CHECK:        omp.section {12! CHECK:          %[[RES:.*]] = fir.do_loop %[[ARG0:.*]] = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%[[ARG1:.*]] = 13! CHECK:            fir.store %[[ARG1]] to %[[DECL_I]]#014! CHECK:            hlfir.assign15! CHECK:            %[[LOAD_I:.*]] = fir.load %[[DECL_I]]#016! CHECK:            %[[RES_I:.*]] = arith.addi %[[LOAD_I]], %{{.*}}17! CHECK:            fir.result %[[RES_I]]18! CHECK:          }19! CHECK:          fir.store %[[RES]] to %[[DECL_I]]#020! CHECK:          omp.terminator21! CHECK:        }22! CHECK:        omp.terminator23! CHECK:      }24! CHECK:      return25! CHECK:    }26subroutine omploop27  implicit none28  integer :: i, j29  i = 130  j = 031  !$omp parallel shared(i)32    !$omp sections33      do i=1,1034         j = j + i35      end do36    !$omp end sections37  !$omp end parallel38end subroutine39 40! --- Check that with default(shared) the variable outside the parallel section41! --- is NOT updated (i is private to the omp.parallel code)42! CHECK-LABEL:  func.func @_QPomploop2()43! CHECK:    %[[ALLOC_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFomploop2Ei"}44! CHECK:    %[[DECL_I:.*]]:2 = hlfir.declare %[[ALLOC_I]] {uniq_name = "_QFomploop2Ei"} :45! CHECK:    omp.parallel {46! CHECK:      %[[ALLOC_PRIV_I:.*]] = fir.alloca i32 {bindc_name = "i", pinned}47! CHECK:      %[[DECL_PRIV_I:.*]]:2 = hlfir.declare %[[ALLOC_PRIV_I]]48! CHECK:      omp.sections {49! CHECK:        omp.section {50! CHECK:          %[[RES:.*]] = fir.do_loop %[[ARG0:.*]] = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%[[ARG1:.*]] = 51! CHECK-NOT:            fir.store %[[ARG1]] to %[[DECL_I]]#152! CHECK:            fir.store %[[ARG1]] to %[[DECL_PRIV_I]]#053! CHECK:            hlfir.assign54! CHECK:            %[[LOAD_I:.*]] = fir.load %[[DECL_PRIV_I]]#055! CHECK:            %[[RES_I:.*]] = arith.addi %[[LOAD_I]], %{{.*}}56! CHECK:            fir.result %[[RES_I]]57! CHECK:          }58! CHECK:          fir.store %[[RES]] to %[[DECL_PRIV_I]]#059! CHECK:          omp.terminator60! CHECK:        }61! CHECK:        omp.terminator62! CHECK:      }63! CHECK:      return64! CHECK:    }65subroutine omploop266  implicit none67  integer :: i, j68  i = 169  j = 070  !$omp parallel default(shared)71    !$omp sections72      do i=1,1073         j = j + i74      end do75    !$omp end sections76  !$omp end parallel77end subroutine78 79 80! --- Check that with no data-sharing the variable outside the parallel section81! --- is NOT updated (i is private to the omp.parallel code)82! CHECK-LABEL:  func.func @_QPomploop3()83! CHECK:    %[[ALLOC_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFomploop3Ei"}84! CHECK:    %[[DECL_I:.*]]:2 = hlfir.declare %[[ALLOC_I]] {uniq_name = "_QFomploop3Ei"} :85! CHECK:    omp.parallel {86! CHECK:      %[[ALLOC_PRIV_I:.*]] = fir.alloca i32 {bindc_name = "i", pinned}87! CHECK:      %[[DECL_PRIV_I:.*]]:2 = hlfir.declare %[[ALLOC_PRIV_I]]88! CHECK:      omp.sections {89! CHECK:        omp.section {90! CHECK:          %[[RES:.*]] = fir.do_loop %[[ARG0:.*]] = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%[[ARG1:.*]] = 91! CHECK-NOT:            fir.store %[[ARG1]] to %[[DECL_I]]#192! CHECK:            fir.store %[[ARG1]] to %[[DECL_PRIV_I]]#093! CHECK:            hlfir.assign94! CHECK:            %[[LOAD_I:.*]] = fir.load %[[DECL_PRIV_I]]#095! CHECK:            %[[RES_I:.*]] = arith.addi %[[LOAD_I]], %{{.*}}96! CHECK:            fir.result %[[RES_I]]97! CHECK:          }98! CHECK:          fir.store %[[RES]] to %[[DECL_PRIV_I]]#099! CHECK:          omp.terminator100! CHECK:        }101! CHECK:        omp.terminator102! CHECK:      }103! CHECK:      return104! CHECK:    }105subroutine omploop3106  implicit none107  integer :: i, j108  i = 1109  j = 0110  !$omp parallel111    !$omp sections112      do i=1,10113         j = j + i114      end do115    !$omp end sections116  !$omp end parallel117end subroutine118 119 120 121