brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 8c1abad Raw
69 lines · plain
1! The "use_device_addr" was added to the "target data" directive in OpenMP 5.0.2! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s3! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s4 5! This tests primary goal is to check the promotion of non-CPTR arguments from6! use_device_ptr to use_device_addr works, without breaking any functionality.7 8!CHECK: func.func @{{.*}}only_use_device_ptr()9 10!CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) use_device_ptr(%{{.*}} -> %{{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) {11subroutine only_use_device_ptr12    use iso_c_binding13    integer, pointer, dimension(:) :: array14    real, pointer :: pa(:)15    type(c_ptr) :: cptr16 17       !$omp target data use_device_ptr(pa, cptr, array)18       !$omp end target data19     end subroutine20 21!CHECK: func.func @{{.*}}mix_use_device_ptr_and_addr()22!CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>) use_device_ptr({{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) {23subroutine mix_use_device_ptr_and_addr24    use iso_c_binding25    integer, pointer, dimension(:) :: array26    real, pointer :: pa(:)27    type(c_ptr) :: cptr28 29       !$omp target data use_device_ptr(pa, cptr) use_device_addr(array)30       !$omp end target data31     end subroutine32 33     !CHECK: func.func @{{.*}}only_use_device_addr()34     !CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) {35     subroutine only_use_device_addr36        use iso_c_binding37        integer, pointer, dimension(:) :: array38        real, pointer :: pa(:)39        type(c_ptr) :: cptr40 41       !$omp target data use_device_addr(pa, cptr, array)42       !$omp end target data43     end subroutine44 45     !CHECK: func.func @{{.*}}mix_use_device_ptr_and_addr_and_map()46     !CHECK: omp.target_data map_entries(%{{.*}}, %{{.*}} : !fir.ref<i32>, !fir.ref<i32>) use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>) use_device_ptr(%{{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) {47     subroutine mix_use_device_ptr_and_addr_and_map48        use iso_c_binding49        integer :: i, j50        integer, pointer, dimension(:) :: array51        real, pointer :: pa(:)52        type(c_ptr) :: cptr53 54       !$omp target data use_device_ptr(pa, cptr) use_device_addr(array) map(tofrom: i, j)55       !$omp end target data56     end subroutine57 58     !CHECK: func.func @{{.*}}only_use_map()59     !CHECK: omp.target_data map_entries(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) {60     subroutine only_use_map61        use iso_c_binding62        integer, pointer, dimension(:) :: array63        real, pointer :: pa(:)64        type(c_ptr) :: cptr65 66       !$omp target data map(pa, cptr, array)67       !$omp end target data68     end subroutine69