brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · c769152 Raw
146 lines · plain
1! This test checks lowering of OpenMP DISTRIBUTE PARALLEL DO SIMD composite2! constructs.3 4! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s5! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s6 7! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_num_threads(8subroutine distribute_parallel_do_simd_num_threads()9  !$omp teams10 11  ! CHECK:      omp.parallel num_threads({{.*}}) {12  ! CHECK:      omp.distribute {13  ! CHECK-NEXT: omp.wsloop {14  ! CHECK-NEXT: omp.simd private({{.*}}) {15  ! CHECK-NEXT: omp.loop_nest16  !$omp distribute parallel do simd num_threads(10)17  do index_ = 1, 1018  end do19  !$omp end distribute parallel do simd20 21  !$omp end teams22end subroutine distribute_parallel_do_simd_num_threads23 24! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_dist_schedule(25subroutine distribute_parallel_do_simd_dist_schedule()26  !$omp teams27 28  ! CHECK:      omp.parallel  {29  ! CHECK:      omp.distribute dist_schedule_static dist_schedule_chunk_size({{.*}}) {30  ! CHECK-NEXT: omp.wsloop {31  ! CHECK-NEXT: omp.simd private({{.*}}) {32  ! CHECK-NEXT: omp.loop_nest33  !$omp distribute parallel do simd dist_schedule(static, 4)34  do index_ = 1, 1035  end do36  !$omp end distribute parallel do simd37 38  !$omp end teams39end subroutine distribute_parallel_do_simd_dist_schedule40 41! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_schedule(42subroutine distribute_parallel_do_simd_schedule()43  !$omp teams44 45  ! CHECK:      omp.parallel {46  ! CHECK:      omp.distribute {47  ! CHECK-NEXT: omp.wsloop schedule(static = {{.*}}) {48  ! CHECK-NEXT: omp.simd private({{.*}}) {49  ! CHECK-NEXT: omp.loop_nest50  !$omp distribute parallel do simd schedule(static, 4)51  do index_ = 1, 1052  end do53  !$omp end distribute parallel do simd54 55  !$omp end teams56end subroutine distribute_parallel_do_simd_schedule57 58! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_simdlen(59subroutine distribute_parallel_do_simd_simdlen()60  !$omp teams61 62  ! CHECK:      omp.parallel {63  ! CHECK:      omp.distribute {64  ! CHECK-NEXT: omp.wsloop {65  ! CHECK-NEXT: omp.simd simdlen(4) private({{.*}}) {66  ! CHECK-NEXT: omp.loop_nest67  !$omp distribute parallel do simd simdlen(4)68  do index_ = 1, 1069  end do70  !$omp end distribute parallel do simd71 72  !$omp end teams73end subroutine distribute_parallel_do_simd_simdlen74 75! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_private(76subroutine distribute_parallel_do_simd_private()77  ! CHECK: %[[INDEX_ALLOC:.*]] = fir.alloca i3278  ! CHECK: %[[INDEX:.*]]:2 = hlfir.declare %[[INDEX_ALLOC]]79  ! CHECK: %[[X_ALLOC:.*]] = fir.alloca i6480  ! CHECK: %[[X:.*]]:2 = hlfir.declare %[[X_ALLOC]]81  integer(8) :: x82 83  ! CHECK: omp.teams {84  !$omp teams85 86  ! CHECK:      omp.parallel {87  ! CHECK:      omp.distribute {88  ! CHECK-NEXT: omp.wsloop {89  ! CHECK-NEXT: omp.simd private(@{{.*}} %[[X]]#0 -> %[[X_ARG:[^,]+]],90  ! CHECK-SAME:                  @{{.*}} %[[INDEX]]#0 -> %[[INDEX_ARG:.*]] : !fir.ref<i64>, !fir.ref<i32>) {91  ! CHECK-NEXT: omp.loop_nest92  ! CHECK:      %[[X_PRIV:.*]]:2 = hlfir.declare %[[X_ARG]]93  ! CHECK:      %[[INDEX_PRIV:.*]]:2 = hlfir.declare %[[INDEX_ARG]]94  !$omp distribute parallel do simd private(x)95  do index_ = 1, 1096  end do97  !$omp end distribute parallel do simd98 99  !$omp end teams100end subroutine distribute_parallel_do_simd_private101 102! CHECK-LABEL:   func.func @_QPlastprivate_cond_in_composite_construct103subroutine lastprivate_cond_in_composite_construct(x_min, x_max, y_min, y_max)104implicit none105integer :: x_min,x_max,y_min,y_max106integer :: i,j107 108! CHECK:           omp.target {{.*}} {109! CHECK:             %[[X_MAX_MAPPED:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}x_max"}110! CHECK:             omp.teams {111! CHECK:               omp.parallel {112! CHECK:                 omp.distribute {113! CHECK:                   omp.wsloop {114! CHECK:                     omp.simd private({{.*}}) {115! CHECK:                       omp.loop_nest (%[[I_IV:.*]], %[[J_IV:.*]]) : i32 = ({{.*}}) to ({{.*}}) inclusive step ({{.*}}) collapse(2) {116! CHECK:                         %[[Y_MAX_PRIV:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}y_max"}117 118! CHECK:                         %[[I_UB:.*]] = fir.load %[[X_MAX_MAPPED]]#0 : !fir.ref<i32>119! CHECK:                         %[[I_STEP:.*]] = arith.constant 1 : i32120! CHECK:                         %[[J_UB:.*]] = fir.load %[[Y_MAX_PRIV]]#0 : !fir.ref<i32>121! CHECK:                         %[[J_STEP:.*]] = arith.constant 1 : i32122 123! CHECK:                         %[[VAL_55:.*]] = arith.addi %[[I_IV]], %[[I_STEP]] : i32124! CHECK:                         %[[VAL_56:.*]] = arith.constant 0 : i32125! CHECK:                         %[[VAL_57:.*]] = arith.cmpi slt, %[[I_STEP]], %[[VAL_56]] : i32126! CHECK:                         %[[VAL_58:.*]] = arith.cmpi slt, %[[VAL_55]], %[[I_UB]] : i32127! CHECK:                         %[[VAL_59:.*]] = arith.cmpi sgt, %[[VAL_55]], %[[I_UB]] : i32128! CHECK:                         %[[VAL_60:.*]] = arith.select %[[VAL_57]], %[[VAL_58]], %[[VAL_59]] : i1129 130! CHECK:                         %[[VAL_61:.*]] = arith.addi %[[J_IV]], %[[J_STEP]] : i32131! CHECK:                         %[[VAL_62:.*]] = arith.constant 0 : i32132! CHECK:                         %[[VAL_63:.*]] = arith.cmpi slt, %[[J_STEP]], %[[VAL_62]] : i32133! CHECK:                         %[[VAL_64:.*]] = arith.cmpi slt, %[[VAL_61]], %[[J_UB]] : i32134! CHECK:                         %[[VAL_65:.*]] = arith.cmpi sgt, %[[VAL_61]], %[[J_UB]] : i32135! CHECK:                         %[[VAL_66:.*]] = arith.select %[[VAL_63]], %[[VAL_64]], %[[VAL_65]] : i1136 137! CHECK:                         %[[LASTPRIV_CMP:.*]] = arith.andi %[[VAL_60]], %[[VAL_66]] : i1138! CHECK:                         fir.if %[[LASTPRIV_CMP]] {139 140!$omp target teams distribute parallel do simd collapse(2) private(y_max)141  do i=x_min,x_max142    do j=y_min,y_max143    enddo144  enddo145end subroutine146