4747
4848! CHECK-LABEL: func.func @_QPdevsub() attributes {cuf.proc_attr = #cuf.cuda_proc<global>}
4949! CHECK: fir.call @llvm.nvvm.barrier0() fastmath<contract> : () -> ()
50- ! CHECK: fir.call @__syncwarp(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (!fir.ref< i32> ) -> ()
50+ ! CHECK: fir.call @__syncwarp(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> ()
5151! CHECK: fir.call @llvm.nvvm.membar.gl() fastmath<contract> : () -> ()
5252! CHECK: fir.call @llvm.nvvm.membar.cta() fastmath<contract> : () -> ()
5353! CHECK: fir.call @llvm.nvvm.membar.sys() fastmath<contract> : () -> ()
7979! CHECK: %{{.*}} = llvm.atomicrmw uinc_wrap %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
8080! CHECK: %{{.*}} = llvm.atomicrmw udec_wrap %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
8181
82- ! CHECK: func.func private @llvm.nvvm.barrier0()
83- ! CHECK: func.func private @__syncwarp(!fir.ref<i32> {cuf.data_attr = #cuf.cuda<device>}) attributes {cuf.proc_attr = #cuf.cuda_proc<device>, fir.bindc_name = "__syncwarp", fir.proc_attrs = #fir.proc_attrs<bind_c>}
84- ! CHECK: func.func private @llvm.nvvm.membar.gl()
85- ! CHECK: func.func private @llvm.nvvm.membar.cta()
86- ! CHECK: func.func private @llvm.nvvm.membar.sys()
87- ! CHECK: func.func private @llvm.nvvm.barrier0.and(i32) -> i32
88- ! CHECK: func.func private @llvm.nvvm.barrier0.popc(i32) -> i32
89- ! CHECK: func.func private @llvm.nvvm.barrier0.or(i32) -> i32
90-
9182subroutine host1()
9283 integer, device :: a(32)
84+ integer, device :: ret
9385 integer :: i, j
9486
9587block; use cudadevice
@@ -98,6 +90,28 @@ block; use cudadevice
9890 a(i) = a(i) * 2.0
9991 call syncthreads()
10092 a(i) = a(i) + a(j) - 34.0
93+
94+ call syncwarp(1)
95+ ret = syncthreads_and(1)
96+ ret = syncthreads_count(1)
97+ ret = syncthreads_or(1)
10198 end do
10299end block
103100end
101+
102+ ! CHECK-LABEL: func.func @_QPhost1()
103+ ! CHECK: cuf.kernel
104+ ! CHECK: fir.call @llvm.nvvm.barrier0() fastmath<contract> : () -> ()
105+ ! CHECK: fir.call @__syncwarp(%c1{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> ()
106+ ! CHECK: fir.call @llvm.nvvm.barrier0.and(%c1{{.*}}) fastmath<contract> : (i32) -> i32
107+ ! CHECK: fir.call @llvm.nvvm.barrier0.popc(%c1{{.*}}) fastmath<contract> : (i32) -> i32
108+ ! CHECK: fir.call @llvm.nvvm.barrier0.or(%c1{{.*}}) fastmath<contract> : (i32) -> i32
109+
110+ ! CHECK: func.func private @llvm.nvvm.barrier0()
111+ ! CHECK: func.func private @__syncwarp(i32) attributes {cuf.proc_attr = #cuf.cuda_proc<device>, fir.bindc_name = "__syncwarp", fir.proc_attrs = #fir.proc_attrs<bind_c>}
112+ ! CHECK: func.func private @llvm.nvvm.membar.gl()
113+ ! CHECK: func.func private @llvm.nvvm.membar.cta()
114+ ! CHECK: func.func private @llvm.nvvm.membar.sys()
115+ ! CHECK: func.func private @llvm.nvvm.barrier0.and(i32) -> i32
116+ ! CHECK: func.func private @llvm.nvvm.barrier0.popc(i32) -> i32
117+ ! CHECK: func.func private @llvm.nvvm.barrier0.or(i32) -> i32
0 commit comments