105 lines · plain
1! This test checks lowering of OpenMP DO SIMD composite constructs.2 3! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s4! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s5 6! CHECK-LABEL: func.func @_QPdo_simd_aligned(7subroutine do_simd_aligned(A)8 use iso_c_binding9 type(c_ptr) :: A10 11 ! CHECK: omp.wsloop12 ! CHECK-NOT: aligned({{.*}})13 ! CHECK-SAME: {14 ! CHECK-NEXT: omp.simd15 ! CHECK-SAME: aligned({{.*}})16 !$omp do simd aligned(A:256)17 do index_ = 1, 1018 call c_test_call(A)19 end do20 !$omp end do simd21end subroutine do_simd_aligned22 23! CHECK-LABEL: func.func @_QPdo_simd_safelen(24subroutine do_simd_safelen()25 ! CHECK: omp.wsloop26 ! CHECK-NOT: safelen({{.*}})27 ! CHECK-SAME: {28 ! CHECK-NEXT: omp.simd29 ! CHECK-SAME: safelen({{.*}})30 !$omp do simd safelen(4)31 do index_ = 1, 1032 end do33 !$omp end do simd34end subroutine do_simd_safelen35 36! CHECK-LABEL: func.func @_QPdo_simd_simdlen(37subroutine do_simd_simdlen()38 ! CHECK: omp.wsloop39 ! CHECK-NOT: simdlen({{.*}})40 ! CHECK-SAME: {41 ! CHECK-NEXT: omp.simd42 ! CHECK-SAME: simdlen({{.*}})43 !$omp do simd simdlen(4)44 do index_ = 1, 1045 end do46 !$omp end do simd47end subroutine do_simd_simdlen48 49! CHECK-LABEL: func.func @_QPdo_simd_reduction(50subroutine do_simd_reduction()51 integer :: sum52 sum = 053 ! CHECK: omp.wsloop54 ! CHECK-SAME: reduction(@[[RED_SYM:.*]] %{{.*}} -> %[[RED_OUTER:.*]] : !fir.ref<i32>)55 ! CHECK-NEXT: omp.simd56 ! CHECK-SAME: reduction(@[[RED_SYM]] %[[RED_OUTER]] -> %[[RED_INNER:.*]] : !fir.ref<i32>)57 ! CHECK-NEXT: omp.loop_nest58 ! CHECK: %[[RED_DECL:.*]]:2 = hlfir.declare %[[RED_INNER]]59 ! CHECK: %[[RED:.*]] = fir.load %[[RED_DECL]]#0 : !fir.ref<i32>60 ! CHECK: %[[RESULT:.*]] = arith.addi %[[RED]], %{{.*}} : i3261 ! CHECK: hlfir.assign %[[RESULT]] to %[[RED_DECL]]#0 : i32, !fir.ref<i32>62 ! CHECK-NEXT: omp.yield63 !$omp do simd reduction(+:sum)64 do index_ = 1, 1065 sum = sum + 166 end do67 !$omp end do simd68end subroutine do_simd_reduction69 70! CHECK-LABEL: func.func @_QPdo_simd_private(71subroutine do_simd_private()72 integer, allocatable :: tmp73 ! CHECK: omp.wsloop74 ! CHECK-NEXT: omp.simd75 ! CHECK-SAME: private(@[[PRIV_BOX_SYM:.*]] %{{.*}} -> %[[PRIV_BOX:.*]], @[[PRIV_IVAR_SYM:.*]] %{{.*}} -> %[[PRIV_IVAR:.*]] : !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<i32>)76 ! CHECK-NEXT: omp.loop_nest (%[[IVAR:.*]]) : i3277 !$omp do simd private(tmp)78 do i=1, 1079 ! CHECK: %[[PRIV_BOX_DECL:.*]]:2 = hlfir.declare %[[PRIV_BOX]]80 ! CHECK: %[[PRIV_IVAR_DECL:.*]]:2 = hlfir.declare %[[PRIV_IVAR]]81 ! CHECK: hlfir.assign %[[IVAR]] to %[[PRIV_IVAR_DECL]]#082 ! CHECK: %[[PRIV_BOX_LOAD:.*]] = fir.load %[[PRIV_BOX_DECL]]83 ! CHECK: hlfir.assign %{{.*}} to %[[PRIV_BOX_DECL]]#084 ! CHECK: omp.yield85 tmp = tmp + 186 end do87end subroutine do_simd_private88 89! CHECK-LABEL: func.func @_QPdo_simd_lastprivate_firstprivate(90subroutine do_simd_lastprivate_firstprivate()91 integer :: a92 ! CHECK: omp.wsloop93 ! CHECK-SAME: private(@[[FIRSTPRIVATE_A_SYM:.*]] %{{.*}} -> %[[FIRSTPRIVATE_A:.*]] : !fir.ref<i32>)94 ! CHECK-NEXT: omp.simd95 ! CHECK-SAME: private(@[[PRIVATE_A_SYM:.*]] %{{.*}} -> %[[PRIVATE_A:.*]], @[[PRIVATE_I_SYM:.*]] %{{.*}} -> %[[PRIVATE_I:.*]] : !fir.ref<i32>, !fir.ref<i32>)96 !$omp do simd lastprivate(a) firstprivate(a)97 do i = 1, 1098 ! CHECK: %[[FIRSTPRIVATE_A_DECL:.*]]:2 = hlfir.declare %[[FIRSTPRIVATE_A]]99 ! CHECK: %[[PRIVATE_A_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_A]]100 ! CHECK: %[[PRIVATE_I_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_I]]101 a = a + 1102 end do103 !$omp end do simd104end subroutine do_simd_lastprivate_firstprivate105