@@ -59,6 +59,21 @@ declare float @llvm.nvvm.ldg.global.f.f32.p0(ptr, i32)
5959declare i32 @llvm.nvvm.atomic.load.inc.32 (ptr , i32 )
6060declare i32 @llvm.nvvm.atomic.load.dec.32 (ptr , i32 )
6161
62+ declare ptr addrspace (3 ) @llvm.nvvm.mapa.shared.cluster (ptr addrspace (3 ), i32 )
63+
64+ declare void @llvm.nvvm.cp.async.bulk.global.to.shared.cluster (ptr addrspace (3 ), ptr addrspace (3 ), ptr addrspace (1 ), i32 , i16 , i64 , i1 , i1 )
65+ declare void @llvm.nvvm.cp.async.bulk.shared.cta.to.cluster (ptr addrspace (3 ), ptr addrspace (3 ), ptr addrspace (3 ), i32 )
66+
67+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.1d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
68+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.2d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
69+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.3d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
70+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.4d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
71+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.5d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
72+
73+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.3d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i16 %im2col0 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
74+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.4d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i16 %im2col0 , i16 %im2col1 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
75+ declare void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.5d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tm , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 %im2col0 , i16 %im2col1 , i16 %im2col2 , i16 %mc , i64 %ch , i1 %f1 , i1 %f2 );
76+
6277; CHECK-LABEL: @simple_upgrade
6378define void @simple_upgrade (i32 %a , i64 %b , i16 %c ) {
6479; CHECK: call i32 @llvm.bitreverse.i32(i32 %a)
@@ -254,3 +269,45 @@ define i32 @atomics(ptr %p0, i32 %a) {
254269 ret i32 %r2
255270}
256271
272+ ; CHECK-LABEL: @nvvm_shared_cluster_intrinsics
273+ define void @nvvm_shared_cluster_intrinsics (ptr addrspace (3 ) %p0 , i32 %offset ) {
274+ ; CHECK: %r = call ptr addrspace(7) @llvm.nvvm.mapa.shared.cluster(ptr addrspace(3) %p0, i32 %offset)
275+ %r = call ptr addrspace (3 ) @llvm.nvvm.mapa.shared.cluster (ptr addrspace (3 ) %p0 , i32 %offset )
276+ ret void
277+ }
278+
279+ ; CHECK-LABEL: @nvvm_cp_async_bulk_intrinsics
280+ define void @nvvm_cp_async_bulk_intrinsics (ptr addrspace (3 ) %dst , ptr addrspace (3 ) %bar , ptr addrspace (1 ) %src , ptr addrspace (3 ) %src_shared , i32 %size ) {
281+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.global.to.shared.cluster(ptr addrspace(7) %1, ptr addrspace(3) %bar, ptr addrspace(1) %src, i32 %size, i16 0, i64 0, i1 false, i1 false)
282+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.shared.cta.to.cluster(ptr addrspace(7) %2, ptr addrspace(3) %bar, ptr addrspace(3) %src_shared, i32 %size)
283+ call void @llvm.nvvm.cp.async.bulk.global.to.shared.cluster (ptr addrspace (3 ) %dst , ptr addrspace (3 ) %bar , ptr addrspace (1 ) %src , i32 %size , i16 0 , i64 0 , i1 false , i1 false )
284+ call void @llvm.nvvm.cp.async.bulk.shared.cta.to.cluster (ptr addrspace (3 ) %dst , ptr addrspace (3 ) %bar , ptr addrspace (3 ) %src_shared , i32 %size )
285+ ret void
286+ }
287+
288+ ; CHECK-LABEL: @nvvm_cp_async_bulk_tensor_g2s_im2col
289+ define void @nvvm_cp_async_bulk_tensor_g2s_im2col (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 %im2col0 , i16 %im2col1 , i16 %im2col2 , i16 %mc , i64 %ch ) {
290+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.3d(ptr addrspace(7) %1, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i16 %im2col0, i16 0, i64 0, i1 false, i1 false)
291+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.4d(ptr addrspace(7) %2, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i32 %d3, i16 %im2col0, i16 %im2col1, i16 0, i64 0, i1 false, i1 false)
292+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.5d(ptr addrspace(7) %3, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i32 %d3, i32 %d4, i16 %im2col0, i16 %im2col1, i16 %im2col2, i16 0, i64 0, i1 false, i1 false)
293+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.3d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i16 %im2col0 , i16 0 , i64 0 , i1 0 , i1 0 )
294+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.4d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i16 %im2col0 , i16 %im2col1 , i16 0 , i64 0 , i1 0 , i1 0 )
295+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.im2col.5d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 %im2col0 , i16 %im2col1 , i16 %im2col2 , i16 0 , i64 0 , i1 0 , i1 0 )
296+ ret void
297+ }
298+
299+ ; CHECK-LABEL: @nvvm_cp_async_bulk_tensor_g2s_tile
300+ define void @nvvm_cp_async_bulk_tensor_g2s_tile (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 %mc , i64 %ch ) {
301+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.1d(ptr addrspace(7) %1, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i16 0, i64 0, i1 false, i1 false)
302+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.2d(ptr addrspace(7) %2, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i16 0, i64 0, i1 false, i1 false)
303+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.3d(ptr addrspace(7) %3, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i16 0, i64 0, i1 false, i1 false)
304+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.4d(ptr addrspace(7) %4, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i32 %d3, i16 0, i64 0, i1 false, i1 false)
305+ ; CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.5d(ptr addrspace(7) %5, ptr addrspace(3) %bar, ptr %tmap, i32 %d0, i32 %d1, i32 %d2, i32 %d3, i32 %d4, i16 0, i64 0, i1 false, i1 false)
306+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.1d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i16 0 , i64 0 , i1 0 , i1 0 )
307+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.2d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i16 0 , i64 0 , i1 0 , i1 0 )
308+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.3d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i16 0 , i64 0 , i1 0 , i1 0 )
309+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.4d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i16 0 , i64 0 , i1 0 , i1 0 )
310+ call void @llvm.nvvm.cp.async.bulk.tensor.g2s.tile.5d (ptr addrspace (3 ) %d , ptr addrspace (3 ) %bar , ptr %tmap , i32 %d0 , i32 %d1 , i32 %d2 , i32 %d3 , i32 %d4 , i16 0 , i64 0 , i1 0 , i1 0 )
311+ ret void
312+ }
313+
0 commit comments