brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · e8709f2 Raw
193 lines · plain
1!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s2!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s  --check-prefix=DEVICE3!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s4!RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE5 6! CHECK-LABEL: func.func @_QPimplicitly_captured_twice7! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}8function implicitly_captured_twice() result(k)9   integer :: i10   i = 1011   k = i12end function implicitly_captured_twice13 14! CHECK-LABEL: func.func @_QPtarget_function_twice_host15! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (enter), automap = false>{{.*}}}16function target_function_twice_host() result(i)17!$omp declare target enter(target_function_twice_host) device_type(host)18   integer :: i19   i = implicitly_captured_twice()20end function target_function_twice_host21 22! DEVICE-LABEL: func.func @_QPtarget_function_twice_device23! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}24function target_function_twice_device() result(i)25!$omp declare target enter(target_function_twice_device) device_type(nohost)26   integer :: i27   i = implicitly_captured_twice()28end function target_function_twice_device29 30!! -----31 32! DEVICE-LABEL: func.func @_QPimplicitly_captured_nest33! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}34function implicitly_captured_nest() result(k)35   integer :: i36   i = 1037   k = i38end function implicitly_captured_nest39 40! DEVICE-LABEL: func.func @_QPimplicitly_captured_one41! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter){{.*}}}42function implicitly_captured_one() result(k)43   k = implicitly_captured_nest()44end function implicitly_captured_one45 46! DEVICE-LABEL: func.func @_QPimplicitly_captured_two47! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}48function implicitly_captured_two() result(k)49   integer :: i50   i = 1051   k = i52end function implicitly_captured_two53 54! DEVICE-LABEL: func.func @_QPtarget_function_test55! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}56function target_function_test() result(j)57!$omp declare target enter(target_function_test) device_type(nohost)58   integer :: i, j59   i = implicitly_captured_one()60   j = implicitly_captured_two() + i61end function target_function_test62 63!! -----64 65! CHECK-LABEL: func.func @_QPimplicitly_captured_nest_twice66! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}67function implicitly_captured_nest_twice() result(k)68   integer :: i69   i = 1070   k = i71end function implicitly_captured_nest_twice72 73! CHECK-LABEL: func.func @_QPimplicitly_captured_one_twice74! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}75function implicitly_captured_one_twice() result(k)76   k = implicitly_captured_nest_twice()77end function implicitly_captured_one_twice78 79! CHECK-LABEL: func.func @_QPimplicitly_captured_two_twice80! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}81function implicitly_captured_two_twice() result(k)82   integer :: i83   i = 1084   k = i85end function implicitly_captured_two_twice86 87! DEVICE-LABEL: func.func @_QPtarget_function_test_device88! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}89function target_function_test_device() result(j)90   !$omp declare target enter(target_function_test_device) device_type(nohost)91   integer :: i, j92   i = implicitly_captured_one_twice()93   j = implicitly_captured_two_twice() + i94end function target_function_test_device95 96! CHECK-LABEL: func.func @_QPtarget_function_test_host97! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (enter), automap = false>{{.*}}}98function target_function_test_host() result(j)99   !$omp declare target enter(target_function_test_host) device_type(host)100   integer :: i, j101   i = implicitly_captured_one_twice()102   j = implicitly_captured_two_twice() + i103end function target_function_test_host104 105!! -----106 107! DEVICE-LABEL: func.func @_QPimplicitly_captured_with_dev_type_recursive108! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}109recursive function implicitly_captured_with_dev_type_recursive(increment) result(k)110!$omp declare target enter(implicitly_captured_with_dev_type_recursive) device_type(host)111   integer :: increment, k112   if (increment == 10) then113      k = increment114   else115      k = implicitly_captured_with_dev_type_recursive(increment + 1)116   end if117end function implicitly_captured_with_dev_type_recursive118 119! DEVICE-LABEL: func.func @_QPtarget_function_with_dev_type_recurse120! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}121function target_function_with_dev_type_recurse() result(i)122!$omp declare target enter(target_function_with_dev_type_recurse) device_type(nohost)123   integer :: i124   i = implicitly_captured_with_dev_type_recursive(0)125end function target_function_with_dev_type_recurse126 127!! -----128 129module test_module130contains131! CHECK-LABEL: func.func @_QMtest_modulePimplicitly_captured_nest_twice132! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}133   function implicitly_captured_nest_twice() result(i)134      integer :: i135      i = 10136   end function implicitly_captured_nest_twice137 138! CHECK-LABEL: func.func @_QMtest_modulePimplicitly_captured_one_twice139! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter), automap = false>{{.*}}}140   function implicitly_captured_one_twice() result(k)141      !$omp declare target enter(implicitly_captured_one_twice) device_type(host)142      k = implicitly_captured_nest_twice()143   end function implicitly_captured_one_twice144 145! DEVICE-LABEL: func.func @_QMtest_modulePimplicitly_captured_two_twice146! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}147   function implicitly_captured_two_twice() result(y)148      integer :: y149      y = 5150   end function implicitly_captured_two_twice151 152! DEVICE-LABEL: func.func @_QMtest_modulePtarget_function_test_device153! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}154   function target_function_test_device() result(j)155      !$omp declare target enter(target_function_test_device) device_type(nohost)156      integer :: i, j157      i = implicitly_captured_one_twice()158      j = implicitly_captured_two_twice() + i159   end function target_function_test_device160end module test_module161 162!! -----163 164program mb165   interface166      subroutine caller_recursive167         !$omp declare target enter(caller_recursive) device_type(nohost)168      end subroutine169 170      recursive subroutine implicitly_captured_recursive(increment)171         integer :: increment172      end subroutine173   end interface174end program175 176! DEVICE-LABEL: func.func @_QPimplicitly_captured_recursive177! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}178recursive subroutine implicitly_captured_recursive(increment)179   integer :: increment180   if (increment == 10) then181      return182   else183      call implicitly_captured_recursive(increment + 1)184   end if185end subroutine186 187! DEVICE-LABEL: func.func @_QPcaller_recursive188! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter), automap = false>{{.*}}}189subroutine caller_recursive190!$omp declare target enter(caller_recursive) device_type(nohost)191   call implicitly_captured_recursive(0)192end subroutine193