! Basic offloading test with a target region ! REQUIRES: flang, amdgpu ! RUN: %libomptarget-compile-fortran-run-and-check-generic ! Testing simple variables in common block. program main call check_device call commonblock_simple_with_implicit_type_var call commonblock_simple_with_integer call commonblock_simple_with_real call commonblock_simple_to_from call set_commonblock_named call use_commonblock_named end program main !----- subroutine check_device use omp_lib integer :: devices(2) devices(1) = omp_get_device_num() !$omp target map(tofrom:devices) devices(2) = omp_get_device_num() !$omp end target print *, omp_get_num_devices() !CHECK: [[ND:[0-9]+]] print *, omp_get_default_device() !CHECK: [[DD:[0-9]+]] !CHECK: devices: [[ND]] [[DD]] print *, "devices: ", devices end subroutine check_device !----- subroutine commonblock_simple_with_implicit_type_var use omp_lib common var1 var1 = 10 print *, "var1 before target = ", var1 !$omp target map(tofrom:var1) var1 = 20 !$omp end target print *, "var1 after target = ", var1 end subroutine ! CHECK: var1 before target = 10 ! CHECK: var1 after target = 20 ! ----- subroutine commonblock_simple_with_integer use omp_lib integer :: var2 common var2 var2 = 10 print *, "var2 before target = ", var2 !$omp target map(tofrom:var2) var2 = 20 !$omp end target print *, "var2 after target = ", var2 end subroutine ! CHECK: var2 before target = 10 ! CHECK: var2 after target = 20 ! ----- subroutine commonblock_simple_with_real use omp_lib real :: var3 common var3 var3 = 12.5 print *, "var3 before target = ", var3 !$omp target map(tofrom:var3) var3 = 14.5 !$omp end target print *, "var3 after target = ", var3 end subroutine ! CHECK: var3 before target = 12.5 ! CHECK: var3 after target = 14.5 ! ----- subroutine commonblock_simple_to_from use omp_lib integer :: var4, tmp common var4 var4 = 10 tmp = 20 !$omp target map(to:var4) map(from:tmp) tmp = var4 var4 = 20 !$omp end target print *, "var4 after target = ", var4 print *, "tmp after target = ", tmp end subroutine ! CHECK: var4 after target = 10 ! CHECK: tmp after target = 10 ! ----- subroutine set_commonblock_named integer :: var6 common /my_common_block/ var6 var6 = 20 end subroutine subroutine use_commonblock_named integer :: var6 common /my_common_block/ var6 print *, "var6 before target = ", var6 !$omp target map(tofrom: var6) var6 = 30 !$omp end target print *, "var6 after target = ", var6 end subroutine ! CHECK: var6 before target = 20 ! CHECK: var6 after target = 30