@@ -12,17 +12,23 @@ attributes(global) subroutine devsub()
1212 integer(8) :: al
1313 integer(8) :: time
1414 integer :: smalltime
15- integer(4) :: res
15+ integer(4) :: res, offset
1616 integer(8) :: resl
1717
18+ integer :: tid
19+ tid = threadIdx%x
20+
1821 call syncthreads()
1922 call syncwarp(1)
2023 call threadfence()
2124 call threadfence_block()
2225 call threadfence_system()
2326 ret = syncthreads_and(1)
27+ res = syncthreads_and(tid > offset)
2428 ret = syncthreads_count(1)
29+ ret = syncthreads_count(tid > offset)
2530 ret = syncthreads_or(1)
31+ ret = syncthreads_or(tid > offset)
2632
2733 ai = atomicadd(ai, 1_4)
2834 al = atomicadd(al, 1_8)
100106! CHECK: fir.call @llvm.nvvm.membar.gl() fastmath<contract> : () -> ()
101107! CHECK: fir.call @llvm.nvvm.membar.cta() fastmath<contract> : () -> ()
102108! CHECK: fir.call @llvm.nvvm.membar.sys() fastmath<contract> : () -> ()
103- ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.and(%c1_i32_0) fastmath<contract> : (i32) -> i32
104- ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.popc(%c1_i32_1) fastmath<contract> : (i32) -> i32
105- ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.or(%c1_i32_2) fastmath<contract> : (i32) -> i32
109+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.and(%c1{{.*}}) fastmath<contract> : (i32) -> i32
110+ ! CHECK: %[[A:.*]] = fir.load %{{.*}} : !fir.ref<i32>
111+ ! CHECK: %[[B:.*]] = fir.load %{{.*}} : !fir.ref<i32>
112+ ! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[A]], %[[B]] : i32
113+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.and(%[[CMP]])
114+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.popc(%c1{{.*}}) fastmath<contract> : (i32) -> i32
115+ ! CHECK: %[[A:.*]] = fir.load %{{.*}} : !fir.ref<i32>
116+ ! CHECK: %[[B:.*]] = fir.load %{{.*}} : !fir.ref<i32>
117+ ! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[A]], %[[B]] : i32
118+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.popc(%[[CMP]]) fastmath<contract> : (i1) -> i32
119+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.or(%c1{{.*}}) fastmath<contract> : (i32) -> i32
120+ ! CHECK: %[[A:.*]] = fir.load %{{.*}} : !fir.ref<i32>
121+ ! CHECK: %[[B:.*]] = fir.load %{{.*}} : !fir.ref<i32>
122+ ! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[A]], %[[B]] : i32
123+ ! CHECK: %{{.*}} = fir.call @llvm.nvvm.barrier0.or(%[[CMP]]) fastmath<contract> : (i1) -> i32
106124! CHECK: %{{.*}} = llvm.atomicrmw add %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i32
107125! CHECK: %{{.*}} = llvm.atomicrmw add %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, i64
108126! CHECK: %{{.*}} = llvm.atomicrmw fadd %{{.*}}, %{{.*}} seq_cst : !llvm.ptr, f32
0 commit comments