@@ -55,3 +55,56 @@ func.func @main(%arg0: complex<f64>) {
5555// CHECK-SAME: (%arg0: f64, %arg1: f64) kernel {
5656// CHECK: gpu.return
5757// CHECK: gpu.launch_func @testmod::@_QPtest blocks in (%{{.*}}, %{{.*}}, %{{.*}}) threads in (%{{.*}}, %{{.*}}, %{{.*}}) : i64 dynamic_shared_memory_size %{{.*}} args(%{{.*}} : f64, %{{.*}} : f64) {cuf.proc_attr = #cuf.cuda_proc<global>}
58+
59+ // -----
60+
61+ module attributes {gpu.container_module , fir.defaultkind = " a1c4d8i4l4r4" , fir.kindmap = " " , 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.target_triple = " x86_64-unknown-linux-gnu" } {
62+ gpu.module @testmod {
63+ gpu.func @_QMbarPfoo (%arg0: f32 , %arg1: !fir.ref <!fir.array <100 xf32 >>, %arg2: !fir.boxchar <1 >) workgroup (%arg3 : memref <1 xf32 , #gpu.address_space <workgroup >> {llvm.align = 16 : i32 }) {
64+ %c0 = arith.constant 0 : index
65+ memref.store %arg0 , %arg3 [%c0 ] : memref <1 xf32 , #gpu.address_space <workgroup >>
66+ gpu.return
67+ }
68+ // CHECK-LABEL: gpu.func @_QMbarPfoo(
69+ // CHECK-SAME: %{{.*}}: f32, %{{.*}}: !fir.ref<!fir.array<100xf32>>, %[[CHAR:.*]]: !fir.ref<!fir.char<1,?>>, %[[LENGTH:.*]]: i64) workgroup(%[[WORKGROUP:.*]] : memref<1xf32, #gpu.address_space<workgroup>> {llvm.align = 16 : i32}) {
70+ // CHECK: %{{.*}} = fir.emboxchar %[[CHAR]], %[[LENGTH]] : (!fir.ref<!fir.char<1,?>>, i64) -> !fir.boxchar<1>
71+ // CHECK: memref.store %{{.*}}, %[[WORKGROUP]][%{{.*}}] : memref<1xf32, #gpu.address_space<workgroup>>
72+
73+ gpu.func @_QMbarPfoo2 (%arg0: f32 , %arg1: !fir.ref <!fir.array <100 xf32 >>, %arg2: !fir.boxchar <1 >) workgroup (%arg3 : memref <1 xf32 , #gpu.address_space <workgroup >> {llvm.align = 16 : i32 }, %arg4 : memref <1 xf32 , #gpu.address_space <workgroup >> {llvm.align = 16 : i32 }) {
74+ %c0 = arith.constant 0 : index
75+ memref.store %arg0 , %arg3 [%c0 ] : memref <1 xf32 , #gpu.address_space <workgroup >>
76+ memref.store %arg0 , %arg4 [%c0 ] : memref <1 xf32 , #gpu.address_space <workgroup >>
77+ gpu.return
78+ }
79+ // CHECK-LABEL: gpu.func @_QMbarPfoo2(
80+ // CHECK-SAME: %{{.*}}: f32, %{{.*}}: !fir.ref<!fir.array<100xf32>>, %[[CHAR:.*]]: !fir.ref<!fir.char<1,?>>, %[[LENGTH:.*]]: i64) workgroup(%[[WG1:.*]] : memref<1xf32, #gpu.address_space<workgroup>> {llvm.align = 16 : i32}, %[[WG2:.*]] : memref<1xf32, #gpu.address_space<workgroup>> {llvm.align = 16 : i32}) {
81+ // CHECK: %{{.*}} = fir.emboxchar %[[CHAR]], %[[LENGTH]] : (!fir.ref<!fir.char<1,?>>, i64) -> !fir.boxchar<1>
82+ // CHECK: memref.store %{{.*}}, %[[WG1]][%{{.*}}] : memref<1xf32, #gpu.address_space<workgroup>>
83+ // CHECK: memref.store %{{.*}}, %[[WG2]][%{{.*}}] : memref<1xf32, #gpu.address_space<workgroup>>
84+
85+ gpu.func @_QMbarPprivate (%arg0: f32 , %arg1: !fir.boxchar <1 >) workgroup (%arg2 : memref <1 xf32 , #gpu.address_space <workgroup >> {llvm.align = 16 : i32 }) private (%arg3 : memref <1 xf32 , #gpu.address_space <private >> {llvm.align = 16 : i32 }) {
86+ %c0 = arith.constant 0 : index
87+ memref.store %arg0 , %arg2 [%c0 ] : memref <1 xf32 , #gpu.address_space <workgroup >>
88+ memref.store %arg0 , %arg3 [%c0 ] : memref <1 xf32 , #gpu.address_space <private >>
89+ gpu.return
90+ }
91+ // CHECK-LABEL: gpu.func @_QMbarPprivate(
92+ // CHECK-SAME: %{{.*}}: f32, %[[CHAR:.*]]: !fir.ref<!fir.char<1,?>>, %[[LENGTH:.*]]: i64) workgroup(%[[WG:.*]] : memref<1xf32, #gpu.address_space<workgroup>> {llvm.align = 16 : i32}) private(%[[PRIVATE:.*]] : memref<1xf32, #gpu.address_space<private>> {llvm.align = 16 : i32}) {
93+ // CHECK: %{{.*}} = fir.emboxchar %[[CHAR]], %[[LENGTH]] : (!fir.ref<!fir.char<1,?>>, i64) -> !fir.boxchar<1>
94+ // CHECK: memref.store %{{.*}}, %[[WG]][%{{.*}}] : memref<1xf32, #gpu.address_space<workgroup>>
95+ // CHECK: memref.store %{{.*}}, %[[PRIVATE]][%{{.*}}] : memref<1xf32, #gpu.address_space<private>>
96+
97+ gpu.func @test_with_char_proc (%arg0: f32 , %arg1: tuple <() -> (), i64 > {fir.char_proc }) workgroup (%arg2 : memref <1 xf32 , #gpu.address_space <workgroup >>) {
98+ %c0 = arith.constant 0 : index
99+ memref.store %arg0 , %arg2 [%c0 ] : memref <1 xf32 , #gpu.address_space <workgroup >>
100+ gpu.return
101+ }
102+ // CHECK-LABEL: gpu.func @test_with_char_proc(
103+ // CHECK-SAME: %{{.*}}: f32, %[[CHARPROC:.*]]: () -> () {fir.char_proc}, %[[LENGTH:.*]]: i64) workgroup(%[[WG:.*]] : memref<1xf32, #gpu.address_space<workgroup>>) {
104+ // CHECK: %{{.*}} = fir.undefined tuple<() -> (), i64>
105+ // CHECK: %{{.*}} = fir.insert_value %{{.*}}, %[[CHARPROC]], [0 : index] : (tuple<() -> (), i64>, () -> ()) -> tuple<() -> (), i64>
106+ // CHECK: %{{.*}} = fir.insert_value %{{.*}}, %[[LENGTH]], [1 : index] : (tuple<() -> (), i64>, i64) -> tuple<() -> (), i64>
107+ // CHECK: memref.store %{{.*}}, %[[WG]][%{{.*}}] : memref<1xf32, #gpu.address_space<workgroup>>
108+ }
109+ }
110+
0 commit comments