@@ -715,3 +715,65 @@ llvm.func @nvvm_breakpoint() {
715715 nvvm.breakpoint
716716 llvm.return
717717}
718+
719+ // -----
720+
721+ // CHECK-LABEL: @tma_prefetch_1d
722+ llvm.func @tma_prefetch_1d (%tma_desc : !llvm.ptr , %d0 : i32 , %ch : i64 ) {
723+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 undef, i1 false)
724+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 %{{.*}}, i1 true)
725+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 ] : !llvm.ptr
726+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 ] l2_cache_hint = %ch : !llvm.ptr
727+ llvm.return
728+ }
729+
730+ // CHECK-LABEL: @tma_prefetch_2d
731+ llvm.func @tma_prefetch_2d (%tma_desc : !llvm.ptr , %d0 : i32 , %d1 : i32 , %ch : i64 ) {
732+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false)
733+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true)
734+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 ] : !llvm.ptr
735+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 ] l2_cache_hint = %ch : !llvm.ptr
736+ llvm.return
737+ }
738+
739+ // CHECK-LABEL: @tma_prefetch_3d
740+ llvm.func @tma_prefetch_3d (%tma_desc : !llvm.ptr , %d0 : i32 , %d1 : i32 , %d2 : i32 , %off0 : i16 , %ch : i64 ) {
741+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false)
742+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true)
743+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 ] : !llvm.ptr
744+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 ] l2_cache_hint = %ch : !llvm.ptr
745+
746+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false)
747+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true)
748+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 ] im2col [%off0 ] : !llvm.ptr
749+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 ] im2col [%off0 ] l2_cache_hint = %ch : !llvm.ptr
750+ llvm.return
751+ }
752+
753+ // CHECK-LABEL: @tma_prefetch_4d
754+ llvm.func @tma_prefetch_4d (%tma_desc : !llvm.ptr , %d0 : i32 , %d1 : i32 , %d2 : i32 , %d3 : i32 , %off0 : i16 , %off1 : i16 , %ch : i64 ) {
755+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false)
756+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true)
757+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 ] : !llvm.ptr
758+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 ] l2_cache_hint = %ch : !llvm.ptr
759+
760+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false)
761+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true)
762+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 ] im2col [%off0 , %off1 ] : !llvm.ptr
763+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 ] im2col [%off0 , %off1 ] l2_cache_hint = %ch : !llvm.ptr
764+ llvm.return
765+ }
766+
767+ // CHECK-LABEL: @tma_prefetch_5d
768+ llvm.func @tma_prefetch_5d (%tma_desc : !llvm.ptr , %d0 : i32 , %d1 : i32 , %d2 : i32 , %d3 : i32 , %d4 : i32 , %off0 : i16 , %off1 : i16 , %off2 : i16 , %ch : i64 ) {
769+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false)
770+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true)
771+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 , %d4 ] : !llvm.ptr
772+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 , %d4 ] l2_cache_hint = %ch : !llvm.ptr
773+
774+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false)
775+ // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true)
776+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 , %d4 ] im2col [%off0 , %off1 , %off2 ] : !llvm.ptr
777+ nvvm.cp.async.bulk.tensor.prefetch %tma_desc , box [%d0 , %d1 , %d2 , %d3 , %d4 ] im2col [%off0 , %off1 , %off2 ] l2_cache_hint = %ch : !llvm.ptr
778+ llvm.return
779+ }
0 commit comments