@@ -59,6 +59,21 @@ declare float @llvm.nvvm.ldg.global.f.f32.p0(ptr, i32)
59
59
declare i32 @llvm.nvvm.atomic.load.inc.32 (ptr , i32 )
60
60
declare i32 @llvm.nvvm.atomic.load.dec.32 (ptr , i32 )
61
61
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
+
62
77
; CHECK-LABEL: @simple_upgrade
63
78
define void @simple_upgrade (i32 %a , i64 %b , i16 %c ) {
64
79
; CHECK: call i32 @llvm.bitreverse.i32(i32 %a)
@@ -254,3 +269,45 @@ define i32 @atomics(ptr %p0, i32 %a) {
254
269
ret i32 %r2
255
270
}
256
271
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