// RUN: fir-opt --split-input-file --cuf-compute-shared-memory %s | FileCheck %s module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QPdynshared() kernel { %0 = fir.assumed_size_extent : index %6 = cuf.shared_memory !fir.array, %0 : index {bindc_name = "r", uniq_name = "_QFdynsharedEr"} -> !fir.ref> %7 = fir.shape %0 : (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-LABEL: gpu.module @cuda_device_mod // CHECK: gpu.func @_QPdynshared() // CHECK: %{{.*}} = cuf.shared_memory[%c0{{.*}} : i32] !fir.array, %{{.*}} : index {bindc_name = "r", uniq_name = "_QFdynsharedEr"} -> !fir.ref> // CHECK: gpu.return // CHECK: } // CHECK: fir.global external @_QPdynshared__shared_mem__ {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<0xi8> // ----- module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { 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 %8 = cuf.shared_memory i32 {bindc_name = "c", uniq_name = "_QFshared_staticEc"} -> !fir.ref %9 = fir.declare %8 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEc"} : (!fir.ref) -> !fir.ref %10 = cuf.shared_memory i32 {bindc_name = "d", uniq_name = "_QFshared_staticEd"} -> !fir.ref %11 = fir.declare %10 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEd"} : (!fir.ref) -> !fir.ref %12 = cuf.shared_memory i64 {bindc_name = "e", uniq_name = "_QFshared_staticEe"} -> !fir.ref %13 = fir.declare %12 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEe"} : (!fir.ref) -> !fir.ref %16 = cuf.shared_memory f32 {bindc_name = "r", uniq_name = "_QFshared_staticEr"} -> !fir.ref %17 = fir.declare %16 {data_attr = #cuf.cuda, uniq_name = "_QFshared_staticEr"} : (!fir.ref) -> !fir.ref gpu.return } } } // CHECK-LABEL: gpu.module @cuda_device_mod // CHECK: gpu.func @_QPshared_static() // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "a", isStatic, uniq_name = "_QFshared_staticEa"} -> !fir.ref // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "b", isStatic, uniq_name = "_QFshared_staticEb"} -> !fir.ref // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "c", isStatic, uniq_name = "_QFshared_staticEc"} -> !fir.ref // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "d", isStatic, uniq_name = "_QFshared_staticEd"} -> !fir.ref // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i64 align 8 {bindc_name = "e", isStatic, uniq_name = "_QFshared_staticEe"} -> !fir.ref // CHECK: cuf.shared_memory[%c0{{.*}} : i32] f32 align 4 {bindc_name = "r", isStatic, uniq_name = "_QFshared_staticEr"} -> !fir.ref // CHECK: gpu.return // CHECK: } // CHECK: fir.global internal @_QPshared_static__shared_mem__a {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: fir.global internal @_QPshared_static__shared_mem__b {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: fir.global internal @_QPshared_static__shared_mem__c {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: fir.global internal @_QPshared_static__shared_mem__d {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: fir.global internal @_QPshared_static__shared_mem__e {alignment = 8 : i64, data_attr = #cuf.cuda} : !fir.array<8xi8> // CHECK: fir.global internal @_QPshared_static__shared_mem__r {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: } // CHECK: } // ----- module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QMmPshareddyn(%arg0: !fir.box> {cuf.data_attr = #cuf.cuda, fir.bindc_name = "a"}, %arg1: !fir.box> {cuf.data_attr = #cuf.cuda, fir.bindc_name = "b"}, %arg2: i32 {fir.bindc_name = "k"}) attributes {cuf.proc_attr = #cuf.cuda_proc} { %c1_i32 = arith.constant 1 : i32 %c2_i32 = arith.constant 2 : i32 %c0 = arith.constant 0 : index %5 = fir.address_of(@_QM__fortran_builtinsE__builtin_blockdim) : !fir.ref> %6 = fir.declare %5 {uniq_name = "_QM__fortran_builtinsE__builtin_blockdim"} : (!fir.ref>) -> !fir.ref> %15 = fir.alloca i32 %16 = fir.declare %15 {fortran_attrs = #fir.var_attrs, uniq_name = "_QMmFss1Ek"} : (!fir.ref) -> !fir.ref %27 = fir.coordinate_of %6, x : (!fir.ref>) -> !fir.ref %28 = fir.load %27 : !fir.ref %29 = fir.convert %28 : (i32) -> i64 %30 = fir.convert %29 : (i64) -> index %31 = arith.cmpi sgt, %30, %c0 : index %32 = arith.select %31, %30, %c0 : index %33 = fir.coordinate_of %6, y : (!fir.ref>) -> !fir.ref %34 = fir.load %33 : !fir.ref %35 = fir.convert %34 : (i32) -> i64 %36 = fir.convert %35 : (i64) -> index %37 = arith.cmpi sgt, %36, %c0 : index %38 = arith.select %37, %36, %c0 : index %39 = cuf.shared_memory !fir.array, %32, %38 : index, index {bindc_name = "s1", uniq_name = "_QMmFss1Es1"} -> !fir.ref> %40 = fir.shape %32, %38 : (index, index) -> !fir.shape<2> %41 = fir.declare %39(%40) {data_attr = #cuf.cuda, uniq_name = "_QMmFss1Es1"} : (!fir.ref>, !fir.shape<2>) -> !fir.ref> %42 = fir.load %16 : !fir.ref %43 = arith.muli %42, %c2_i32 : i32 %44 = fir.convert %43 : (i32) -> i64 %45 = fir.convert %44 : (i64) -> index %46 = arith.cmpi sgt, %45, %c0 : index %47 = arith.select %46, %45, %c0 : index %48 = fir.load %16 : !fir.ref %49 = fir.convert %48 : (i32) -> i64 %50 = fir.convert %49 : (i64) -> index %51 = arith.cmpi sgt, %50, %c0 : index %52 = arith.select %51, %50, %c0 : index %53 = cuf.shared_memory !fir.array, %47, %52 : index, index {bindc_name = "s2", uniq_name = "_QMmFss1Es2"} -> !fir.ref> gpu.return } } } // CHECK: gpu.func @_QMmPshareddyn(%arg0: !fir.box> {cuf.data_attr = #cuf.cuda, fir.bindc_name = "a"}, %arg1: !fir.box> {cuf.data_attr = #cuf.cuda, fir.bindc_name = "b"}, %arg2: i32 {fir.bindc_name = "k"}) attributes {cuf.proc_attr = #cuf.cuda_proc} { // CHECK: %[[EXTENT0:.*]] = arith.select // CHECK: %[[EXTENT1:.*]] = arith.select // CHECK: %[[SIZE_EXTENT:.*]] = arith.muli %c4{{.*}}, %[[EXTENT0]] : index // CHECK: %[[DYNSIZE:.*]] = arith.muli %[[SIZE_EXTENT]], %[[EXTENT1]] : index // CHECK: cuf.shared_memory[%c0{{.*}} : i32] !fir.array, %9, %15 : index, index {bindc_name = "s1", uniq_name = "_QMmFss1Es1"} -> !fir.ref> // CHECK: %[[CONV_DYNSIZE:.*]] = fir.convert %[[DYNSIZE]] : (index) -> i32 // CHECK: cuf.shared_memory[%[[CONV_DYNSIZE]] : i32] !fir.array, %26, %31 : index, index {bindc_name = "s2", uniq_name = "_QMmFss1Es2"} -> !fir.ref> // ----- module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QPnoshared() kernel { gpu.return } } } // CHECK-LABEL: gpu.func @_QPnoshared() // CHECK-NOT: fir.global internal @_QPnoshared__shared_mem // ----- module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QMmtestsPtestany(%arg0: !fir.ref> {cuf.data_attr = #cuf.cuda, fir.bindc_name = "a"}) attributes {cuf.proc_attr = #cuf.cuda_proc} { %0 = fir.dummy_scope : !fir.dscope %a0 = fir.assumed_size_extent : index %1 = fir.shape %a0 : (index) -> !fir.shape<1> %2:2 = hlfir.declare %arg0(%1) dummy_scope %0 {data_attr = #cuf.cuda, uniq_name = "_QMmtestsFtestanyEa"} : (!fir.ref>, !fir.shape<1>, !fir.dscope) -> (!fir.box>, !fir.ref>) %3 = fir.address_of(@_QM__fortran_builtinsE__builtin_blockdim) : !fir.ref> %4:2 = hlfir.declare %3 {uniq_name = "_QM__fortran_builtinsE__builtin_blockdim"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %5 = fir.address_of(@_QM__fortran_builtinsE__builtin_blockidx) : !fir.ref> %6:2 = hlfir.declare %5 {uniq_name = "_QM__fortran_builtinsE__builtin_blockidx"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %a2 = fir.assumed_size_extent : index %7 = cuf.shared_memory !fir.array, %a2 : index {bindc_name = "dmasks", uniq_name = "_QMmtestsFtestanyEdmasks"} -> !fir.ref> %8 = fir.shape %a2 : (index) -> !fir.shape<1> %9:2 = hlfir.declare %7(%8) {data_attr = #cuf.cuda, uniq_name = "_QMmtestsFtestanyEdmasks"} : (!fir.ref>, !fir.shape<1>) -> (!fir.box>, !fir.ref>) %10 = fir.address_of(@_QM__fortran_builtinsE__builtin_griddim) : !fir.ref> %11:2 = hlfir.declare %10 {uniq_name = "_QM__fortran_builtinsE__builtin_griddim"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %12 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QMmtestsFtestanyEi"} %13:2 = hlfir.declare %12 {uniq_name = "_QMmtestsFtestanyEi"} : (!fir.ref) -> (!fir.ref, !fir.ref) %14 = fir.alloca i32 {bindc_name = "iam", uniq_name = "_QMmtestsFtestanyEiam"} %15:2 = hlfir.declare %14 {uniq_name = "_QMmtestsFtestanyEiam"} : (!fir.ref) -> (!fir.ref, !fir.ref) %16 = fir.alloca i32 {bindc_name = "j", uniq_name = "_QMmtestsFtestanyEj"} %17:2 = hlfir.declare %16 {uniq_name = "_QMmtestsFtestanyEj"} : (!fir.ref) -> (!fir.ref, !fir.ref) %a3 = fir.assumed_size_extent : index %18 = cuf.shared_memory !fir.array, %a3 : index {bindc_name = "smasks", uniq_name = "_QMmtestsFtestanyEsmasks"} -> !fir.ref> %19 = fir.shape %a3 : (index) -> !fir.shape<1> %20:2 = hlfir.declare %18(%19) {data_attr = #cuf.cuda, uniq_name = "_QMmtestsFtestanyEsmasks"} : (!fir.ref>, !fir.shape<1>) -> (!fir.box>, !fir.ref>) gpu.return } } } // CHECK-LABEL: gpu.func @_QMmtestsPtestany // CHECK: %{{.*}} = cuf.shared_memory[%c0{{.*}} : i32] !fir.array, %{{.*}} : index {bindc_name = "dmasks", uniq_name = "_QMmtestsFtestanyEdmasks"} -> !fir.ref> // CHECK: %{{.*}} = cuf.shared_memory[%c0{{.*}} : i32] !fir.array, %{{.*}} : index {bindc_name = "smasks", uniq_name = "_QMmtestsFtestanyEsmasks"} -> !fir.ref> // CHECK: fir.global external @_QMmtestsPtestany__shared_mem__ {alignment = 8 : i64, data_attr = #cuf.cuda} : !fir.array<0xi8> // ----- // Test that cuf.shared_memory ops nested inside scf.parallel (from reduction // lowering) are also processed. walk is needed instead of getOps to find // ops at any nesting depth within gpu.func. module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QPreduce_kernel(%arg0: !fir.ref, %arg1: index) kernel { %c0 = arith.constant 0 : index %c1 = arith.constant 1 : index %c0_i32 = arith.constant 0 : i32 %0 = cuf.shared_memory i32 {bindc_name = "_lro_private_0", uniq_name = "_lro_private_0"} -> !fir.ref %1 = fir.convert %0 : (!fir.ref) -> memref memref.store %c0_i32, %1[] : memref %2 = scf.parallel (%iv) = (%c0) to (%arg1) step (%c1) init (%c0_i32) -> i32 { %3 = cuf.shared_memory i32 {bindc_name = "_lro_private_1", uniq_name = "_lro_private_1"} -> !fir.ref %4 = fir.convert %3 : (!fir.ref) -> memref %5 = memref.load %4[] : memref scf.reduce(%5 : i32) { ^bb0(%lhs: i32, %rhs: i32): %6 = arith.addi %lhs, %rhs : i32 scf.reduce.return %6 : i32 } } gpu.return } } } // CHECK-LABEL: gpu.func @_QPreduce_kernel // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "_lro_private_0", isStatic, uniq_name = "_lro_private_0"} -> !fir.ref // CHECK: scf.parallel // CHECK: cuf.shared_memory[%c0{{.*}} : i32] i32 align 4 {bindc_name = "_lro_private_1", isStatic, uniq_name = "_lro_private_1"} -> !fir.ref // CHECK: fir.global internal @_QPreduce_kernel__shared_mem___lro_private_0 {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // CHECK: fir.global internal @_QPreduce_kernel__shared_mem___lro_private_1 {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<4xi8> // ----- module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", gpu.container_module, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 (https://github.com/llvm/llvm-project.git cae351f3453a0a26ec8eb2ddaf773c24a29d929e)", llvm.target_triple = "x86_64-unknown-linux-gnu"} { gpu.module @cuda_device_mod { gpu.func @_QPt1() kernel { %c256 = arith.constant 256 : index %0 = fir.dummy_scope : !fir.dscope %1 = fir.address_of(@_QM__fortran_builtinsE__builtin_blockdim) : !fir.ref> %2:2 = hlfir.declare %1 {uniq_name = "_QM__fortran_builtinsE__builtin_blockdim"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %3 = fir.address_of(@_QM__fortran_builtinsE__builtin_blockidx) : !fir.ref> %4:2 = hlfir.declare %3 {uniq_name = "_QM__fortran_builtinsE__builtin_blockidx"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %5 = fir.assumed_size_extent : index %6 = cuf.shared_memory !fir.array, %5 : index {bindc_name = "d", uniq_name = "_QFt1Ed"} -> !fir.ref> %7 = fir.shape %5 : (index) -> !fir.shape<1> %8:2 = hlfir.declare %6(%7) {data_attr = #cuf.cuda, uniq_name = "_QFt1Ed"} : (!fir.ref>, !fir.shape<1>) -> (!fir.box>, !fir.ref>) %9 = fir.address_of(@_QM__fortran_builtinsE__builtin_griddim) : !fir.ref> %10:2 = hlfir.declare %9 {uniq_name = "_QM__fortran_builtinsE__builtin_griddim"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %11 = cuf.shared_memory !fir.array<256xf32> {bindc_name = "s", uniq_name = "_QFt1Es"} -> !fir.ref> %12 = fir.shape %c256 : (index) -> !fir.shape<1> %13:2 = hlfir.declare %11(%12) {data_attr = #cuf.cuda, uniq_name = "_QFt1Es"} : (!fir.ref>, !fir.shape<1>) -> (!fir.ref>, !fir.ref>) %14 = fir.address_of(@_QM__fortran_builtinsE__builtin_threadidx) : !fir.ref> %15:2 = hlfir.declare %14 {uniq_name = "_QM__fortran_builtinsE__builtin_threadidx"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) %16 = fir.alloca i32 {bindc_name = "__builtin_warpsize", uniq_name = "_QM__fortran_builtinsEC__builtin_warpsize"} %17:2 = hlfir.declare %16 {uniq_name = "_QM__fortran_builtinsEC__builtin_warpsize"} : (!fir.ref) -> (!fir.ref, !fir.ref) gpu.return } } } // CHECK-LABEL: gpu.func @_QPt1() // CHECK: fir.global internal @_QPt1__shared_mem__s {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<1024xi8> // CHECK: fir.global external @_QPt1__shared_mem__ {alignment = 4 : i64, data_attr = #cuf.cuda} : !fir.array<0xi8>