// RUN: fir-opt --split-input-file %s | fir-opt --split-input-file | FileCheck %s // Simple round trip test of operations. func.func @_QPsub1() { %0 = fir.alloca !fir.box>> {bindc_name = "a", uniq_name = "_QFsub1Ea"} %4:2 = hlfir.declare %0 {data_attr = #cuf.cuda, fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %11 = fir.convert %4#1 : (!fir.ref>>>) -> !fir.ref> %13 = cuf.allocate %11 : !fir.ref> {data_attr = #cuf.cuda} -> i32 %14 = cuf.deallocate %11 : !fir.ref> {data_attr = #cuf.cuda} -> i32 return } // CHECK: cuf.allocate %{{.*}} : !fir.ref> {data_attr = #cuf.cuda} -> i32 // CHECK: cuf.deallocate %{{.*}} : !fir.ref> {data_attr = #cuf.cuda} -> i32 // ----- func.func @_QPsub1() { %0 = fir.alloca !fir.box>> {bindc_name = "a", uniq_name = "_QFsub1Ea"} %1 = fir.alloca i64 %4:2 = hlfir.declare %0 {data_attr = #cuf.cuda, fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %11 = fir.convert %4#1 : (!fir.ref>>>) -> !fir.ref> %13 = cuf.allocate %11 : !fir.ref> stream(%1 : !fir.ref) {data_attr = #cuf.cuda} -> i32 return } // CHECK: cuf.allocate %{{.*}} : !fir.ref> stream(%{{.*}} : !fir.ref) {data_attr = #cuf.cuda} -> i32 // ----- func.func @_QPsub1() { %0 = fir.alloca !fir.box>> {bindc_name = "a", uniq_name = "_QFsub1Ea"} %1 = fir.alloca !fir.box>> {bindc_name = "b", uniq_name = "_QFsub1Eb"} %4:2 = hlfir.declare %0 {data_attr = #cuf.cuda, fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %5:2 = hlfir.declare %1 {fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %11 = fir.convert %4#1 : (!fir.ref>>>) -> !fir.ref> %12 = fir.convert %5#1 : (!fir.ref>>>) -> !fir.ref> %13 = cuf.allocate %11 : !fir.ref> source(%12 : !fir.ref>) {data_attr = #cuf.cuda} -> i32 return } // CHECK: cuf.allocate %{{.*}} : !fir.ref> source(%{{.*}} : !fir.ref>) {data_attr = #cuf.cuda} -> i32 // ----- func.func @_QPsub1() { %0 = fir.alloca !fir.box>> {bindc_name = "a", uniq_name = "_QFsub1Ea"} %pinned = fir.alloca i1 %4:2 = hlfir.declare %0 {data_attr = #cuf.cuda, fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %11 = fir.convert %4#1 : (!fir.ref>>>) -> !fir.ref> %13 = cuf.allocate %11 : !fir.ref> pinned(%pinned : !fir.ref) {data_attr = #cuf.cuda} -> i32 return } // CHECK: cuf.allocate %{{.*}} : !fir.ref> pinned(%{{.*}} : !fir.ref) {data_attr = #cuf.cuda} -> i32 // ----- func.func @_QPsub1() { %0 = fir.alloca !fir.box>> {bindc_name = "a", uniq_name = "_QFsub1Ea"} %4:2 = hlfir.declare %0 {data_attr = #cuf.cuda, fortran_attrs = #fir.var_attrs, uniq_name = "_QFsub1Ea"} : (!fir.ref>>>) -> (!fir.ref>>>, !fir.ref>>>) %c100 = arith.constant 100 : index %7 = fir.alloca !fir.char<1,100> {bindc_name = "msg", uniq_name = "_QFsub1Emsg"} %8:2 = hlfir.declare %7 typeparams %c100 {uniq_name = "_QFsub1Emsg"} : (!fir.ref>, index) -> (!fir.ref>, !fir.ref>) %9 = fir.embox %8#1 : (!fir.ref>) -> !fir.box> %11 = fir.convert %4#1 : (!fir.ref>>>) -> !fir.ref> %16 = fir.convert %9 : (!fir.box>) -> !fir.box %13 = cuf.allocate %11 : !fir.ref> errmsg(%16 : !fir.box) {data_attr = #cuf.cuda, hasStat} -> i32 %14 = cuf.deallocate %11 : !fir.ref> errmsg(%16 : !fir.box) {data_attr = #cuf.cuda, hasStat} -> i32 return } // CHECK: cuf.allocate %{{.*}} : !fir.ref> errmsg(%{{.*}} : !fir.box) {data_attr = #cuf.cuda, hasStat} -> i32 // CHECK: cuf.deallocate %{{.*}} : !fir.ref> errmsg(%{{.*}} : !fir.box) {data_attr = #cuf.cuda, hasStat} -> i32 // ----- func.func @_QPsub1() { %0 = cuf.alloc f32 {bindc_name = "r", data_attr = #cuf.cuda, uniq_name = "_QFsub1Er"} -> !fir.ref cuf.free %0 : !fir.ref {data_attr = #cuf.cuda} return } // CHECK: cuf.alloc // CHECK: cuf.free // ----- gpu.module @cuda_device_mod { gpu.func @_QPdynshared() kernel { %c-1 = arith.constant -1 : index %6 = cuf.shared_memory !fir.array, %c-1 : index {bindc_name = "r", uniq_name = "_QFdynsharedEr"} -> !fir.ref> %7 = fir.shape %c-1 : (index) -> !fir.shape<1> %8 = fir.declare %6(%7) {data_attr = #cuf.cuda, uniq_name = "_QFdynsharedEr"} : (!fir.ref>, !fir.shape<1>) -> !fir.ref> gpu.return } } // CHECK: cuf.shared_memory // ----- gpu.module @cuda_device_mod { gpu.func @_QPshared_static() attributes {cuf.proc_attr = #cuf.cuda_proc} { %0 = cuf.shared_memory i32 {bindc_name = "a", uniq_name = "_QFshared_staticEa"} -> !fir.ref %1 = fir.declare %0 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEa"} : (!fir.ref) -> !fir.ref %2 = cuf.shared_memory i32 {bindc_name = "b", uniq_name = "_QFshared_staticEb"} -> !fir.ref %3 = fir.declare %2 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEb"} : (!fir.ref) -> !fir.ref gpu.return } } // CHECK-COUNT-2: cuf.shared_memory