@@ -715,3 +715,65 @@ llvm.func @nvvm_breakpoint() {
715
715
nvvm.breakpoint
716
716
llvm.return
717
717
}
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