1330d8983SJohannes Doerfert! Basic offloading test with a target region 2*88234488SEthan Luis McDonough! REQUIRES: flang, amdgpu 3330d8983SJohannes Doerfert! RUN: %libomptarget-compile-fortran-run-and-check-generic 4330d8983SJohannes Doerfert 5330d8983SJohannes Doerfert! Testing simple variables in common block. 6330d8983SJohannes Doerfertprogram main 7330d8983SJohannes Doerfert call check_device 8330d8983SJohannes Doerfert call commonblock_simple_with_implicit_type_var 9330d8983SJohannes Doerfert call commonblock_simple_with_integer 10330d8983SJohannes Doerfert call commonblock_simple_with_real 11330d8983SJohannes Doerfert call commonblock_simple_to_from 12330d8983SJohannes Doerfert call set_commonblock_named 13330d8983SJohannes Doerfert call use_commonblock_named 14330d8983SJohannes Doerfertend program main 15330d8983SJohannes Doerfert 16330d8983SJohannes Doerfert!----- 17330d8983SJohannes Doerfert 18330d8983SJohannes Doerfertsubroutine check_device 19330d8983SJohannes Doerfert use omp_lib 20330d8983SJohannes Doerfert integer :: devices(2) 21330d8983SJohannes Doerfert devices(1) = omp_get_device_num() 22330d8983SJohannes Doerfert !$omp target map(tofrom:devices) 23330d8983SJohannes Doerfert devices(2) = omp_get_device_num() 24330d8983SJohannes Doerfert !$omp end target 25330d8983SJohannes Doerfert print *, omp_get_num_devices() 26330d8983SJohannes Doerfert !CHECK: [[ND:[0-9]+]] 27330d8983SJohannes Doerfert print *, omp_get_default_device() 28330d8983SJohannes Doerfert !CHECK: [[DD:[0-9]+]] 29330d8983SJohannes Doerfert !CHECK: devices: [[ND]] [[DD]] 30330d8983SJohannes Doerfert print *, "devices: ", devices 31330d8983SJohannes Doerfertend subroutine check_device 32330d8983SJohannes Doerfert 33330d8983SJohannes Doerfert!----- 34330d8983SJohannes Doerfert 35330d8983SJohannes Doerfertsubroutine commonblock_simple_with_implicit_type_var 36330d8983SJohannes Doerfert use omp_lib 37330d8983SJohannes Doerfert common var1 38330d8983SJohannes Doerfert var1 = 10 39330d8983SJohannes Doerfert print *, "var1 before target = ", var1 40330d8983SJohannes Doerfert !$omp target map(tofrom:var1) 41330d8983SJohannes Doerfert var1 = 20 42330d8983SJohannes Doerfert !$omp end target 43330d8983SJohannes Doerfert print *, "var1 after target = ", var1 44330d8983SJohannes Doerfertend subroutine 45330d8983SJohannes Doerfert 46330d8983SJohannes Doerfert! CHECK: var1 before target = 10 47330d8983SJohannes Doerfert! CHECK: var1 after target = 20 48330d8983SJohannes Doerfert 49330d8983SJohannes Doerfert! ----- 50330d8983SJohannes Doerfert 51330d8983SJohannes Doerfertsubroutine commonblock_simple_with_integer 52330d8983SJohannes Doerfert use omp_lib 53330d8983SJohannes Doerfert integer :: var2 54330d8983SJohannes Doerfert common var2 55330d8983SJohannes Doerfert var2 = 10 56330d8983SJohannes Doerfert print *, "var2 before target = ", var2 57330d8983SJohannes Doerfert !$omp target map(tofrom:var2) 58330d8983SJohannes Doerfert var2 = 20 59330d8983SJohannes Doerfert !$omp end target 60330d8983SJohannes Doerfert print *, "var2 after target = ", var2 61330d8983SJohannes Doerfertend subroutine 62330d8983SJohannes Doerfert 63330d8983SJohannes Doerfert! CHECK: var2 before target = 10 64330d8983SJohannes Doerfert! CHECK: var2 after target = 20 65330d8983SJohannes Doerfert 66330d8983SJohannes Doerfert! ----- 67330d8983SJohannes Doerfert 68330d8983SJohannes Doerfertsubroutine commonblock_simple_with_real 69330d8983SJohannes Doerfert use omp_lib 70330d8983SJohannes Doerfert real :: var3 71330d8983SJohannes Doerfert common var3 72330d8983SJohannes Doerfert var3 = 12.5 73330d8983SJohannes Doerfert print *, "var3 before target = ", var3 74330d8983SJohannes Doerfert !$omp target map(tofrom:var3) 75330d8983SJohannes Doerfert var3 = 14.5 76330d8983SJohannes Doerfert !$omp end target 77330d8983SJohannes Doerfert print *, "var3 after target = ", var3 78330d8983SJohannes Doerfertend subroutine 79330d8983SJohannes Doerfert 80330d8983SJohannes Doerfert! CHECK: var3 before target = 12.5 81330d8983SJohannes Doerfert! CHECK: var3 after target = 14.5 82330d8983SJohannes Doerfert 83330d8983SJohannes Doerfert! ----- 84330d8983SJohannes Doerfert 85330d8983SJohannes Doerfertsubroutine commonblock_simple_to_from 86330d8983SJohannes Doerfert use omp_lib 87330d8983SJohannes Doerfert integer :: var4, tmp 88330d8983SJohannes Doerfert common var4 89330d8983SJohannes Doerfert var4 = 10 90330d8983SJohannes Doerfert tmp = 20 91330d8983SJohannes Doerfert !$omp target map(to:var4) map(from:tmp) 92330d8983SJohannes Doerfert tmp = var4 93330d8983SJohannes Doerfert var4 = 20 94330d8983SJohannes Doerfert !$omp end target 95330d8983SJohannes Doerfert print *, "var4 after target = ", var4 96330d8983SJohannes Doerfert print *, "tmp after target = ", tmp 97330d8983SJohannes Doerfertend subroutine 98330d8983SJohannes Doerfert 99330d8983SJohannes Doerfert! CHECK: var4 after target = 10 100330d8983SJohannes Doerfert! CHECK: tmp after target = 10 101330d8983SJohannes Doerfert 102330d8983SJohannes Doerfert! ----- 103330d8983SJohannes Doerfert 104330d8983SJohannes Doerfertsubroutine set_commonblock_named 105330d8983SJohannes Doerfert integer :: var6 106330d8983SJohannes Doerfert common /my_common_block/ var6 107330d8983SJohannes Doerfert var6 = 20 108330d8983SJohannes Doerfertend subroutine 109330d8983SJohannes Doerfert 110330d8983SJohannes Doerfertsubroutine use_commonblock_named 111330d8983SJohannes Doerfert integer :: var6 112330d8983SJohannes Doerfert common /my_common_block/ var6 113330d8983SJohannes Doerfert print *, "var6 before target = ", var6 114330d8983SJohannes Doerfert !$omp target map(tofrom: var6) 115330d8983SJohannes Doerfert var6 = 30 116330d8983SJohannes Doerfert !$omp end target 117330d8983SJohannes Doerfert print *, "var6 after target = ", var6 118330d8983SJohannes Doerfertend subroutine 119330d8983SJohannes Doerfert 120330d8983SJohannes Doerfert! CHECK: var6 before target = 20 121330d8983SJohannes Doerfert! CHECK: var6 after target = 30 122