1*b279f6b0SFangrui Song; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx80| FileCheck --check-prefixes=CHECK %s 2*b279f6b0SFangrui Song; RUN: %if ptxas-12.0 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx80| %ptxas-verify -arch=sm_90 %} 33d4964f4SArtem Belevich 43d4964f4SArtem Belevich; CHECK-LABEL: test_isspacep 53d4964f4SArtem Belevichdefine i1 @test_isspacep_shared_cluster(ptr %p) { 63d4964f4SArtem Belevich; CHECK: isspacep.shared::cluster 73d4964f4SArtem Belevich %a = tail call i1 @llvm.nvvm.isspacep.shared.cluster(ptr %p) 83d4964f4SArtem Belevich; CHECK: ret 93d4964f4SArtem Belevich ret i1 %a 103d4964f4SArtem Belevich} 113d4964f4SArtem Belevich 123d4964f4SArtem Belevich; CHECK-LABEL: test_mapa( 133d4964f4SArtem Belevichdefine ptr @test_mapa(ptr %p, i32 %r) { 143d4964f4SArtem Belevich; CHECK64: mapa.u64 153d4964f4SArtem Belevich %a = call ptr @llvm.nvvm.mapa(ptr %p, i32 %r) 163d4964f4SArtem Belevich ret ptr %a 173d4964f4SArtem Belevich} 183d4964f4SArtem Belevich 193d4964f4SArtem Belevich; CHECK-LABEL: test_mapa_shared_cluster( 203d4964f4SArtem Belevichdefine ptr addrspace(3) @test_mapa_shared_cluster(ptr addrspace(3) %p, i32 %r) { 213d4964f4SArtem Belevich; CHECK: mapa.shared::cluster.u64 223d4964f4SArtem Belevich %a = call ptr addrspace(3) @llvm.nvvm.mapa.shared.cluster(ptr addrspace(3) %p, i32 %r) 233d4964f4SArtem Belevich ret ptr addrspace(3) %a 243d4964f4SArtem Belevich} 253d4964f4SArtem Belevich 263d4964f4SArtem Belevich; CHECK-LABEL: test_getctarank( 273d4964f4SArtem Belevichdefine i32 @test_getctarank(ptr %p) { 283d4964f4SArtem Belevich; CHECK: getctarank.u64 293d4964f4SArtem Belevich %a = call i32 @llvm.nvvm.getctarank(ptr %p) 303d4964f4SArtem Belevich ret i32 %a 313d4964f4SArtem Belevich} 323d4964f4SArtem Belevich 333d4964f4SArtem Belevich; CHECK-LABEL: test_getctarank_shared_cluster( 343d4964f4SArtem Belevichdefine i32 @test_getctarank_shared_cluster(ptr addrspace(3) %p) { 353d4964f4SArtem Belevich; CHECK64: getctarank.shared::cluster.u64 363d4964f4SArtem Belevich; CHECK32: getctarank.shared::cluster.u32 373d4964f4SArtem Belevich %a = call i32 @llvm.nvvm.getctarank.shared.cluster(ptr addrspace(3) %p) 383d4964f4SArtem Belevich ret i32 %a 393d4964f4SArtem Belevich} 403d4964f4SArtem Belevich 413d4964f4SArtem Belevich; CHECK-LABEL: test_clusterid_x( 423d4964f4SArtem Belevichdefine i32 @test_clusterid_x() { 433d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.x; 443d4964f4SArtem Belevich; CHECK: ret; 453d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.x() 463d4964f4SArtem Belevich ret i32 %x 473d4964f4SArtem Belevich} 483d4964f4SArtem Belevich; CHECK-LABEL: test_clusterid_y( 493d4964f4SArtem Belevichdefine i32 @test_clusterid_y() { 503d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.y; 513d4964f4SArtem Belevich; CHECK: ret; 523d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.y() 533d4964f4SArtem Belevich ret i32 %x 543d4964f4SArtem Belevich} 553d4964f4SArtem Belevich; CHECK-LABEL: test_clusterid_z( 563d4964f4SArtem Belevichdefine i32 @test_clusterid_z() { 573d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.z; 583d4964f4SArtem Belevich; CHECK: ret; 593d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.z() 603d4964f4SArtem Belevich ret i32 %x 613d4964f4SArtem Belevich} 623d4964f4SArtem Belevich; CHECK-LABEL: test_clusterid_w( 633d4964f4SArtem Belevichdefine i32 @test_clusterid_w() { 643d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.w; 653d4964f4SArtem Belevich; CHECK: ret; 663d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.w() 673d4964f4SArtem Belevich ret i32 %x 683d4964f4SArtem Belevich} 693d4964f4SArtem Belevich 703d4964f4SArtem Belevich; CHECK-LABEL: test_nclusterid_x( 713d4964f4SArtem Belevichdefine i32 @test_nclusterid_x() { 723d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.x; 733d4964f4SArtem Belevich; CHECK: ret; 743d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.x() 753d4964f4SArtem Belevich ret i32 %x 763d4964f4SArtem Belevich} 773d4964f4SArtem Belevich; CHECK-LABEL: test_nclusterid_y( 783d4964f4SArtem Belevichdefine i32 @test_nclusterid_y() { 793d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.y; 803d4964f4SArtem Belevich; CHECK: ret; 813d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.y() 823d4964f4SArtem Belevich ret i32 %x 833d4964f4SArtem Belevich} 843d4964f4SArtem Belevich; CHECK-LABEL: test_nclusterid_z( 853d4964f4SArtem Belevichdefine i32 @test_nclusterid_z() { 863d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.z; 873d4964f4SArtem Belevich; CHECK: ret; 883d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.z() 893d4964f4SArtem Belevich ret i32 %x 903d4964f4SArtem Belevich} 913d4964f4SArtem Belevich; CHECK-LABEL: test_nclusterid_w( 923d4964f4SArtem Belevichdefine i32 @test_nclusterid_w() { 933d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.w; 943d4964f4SArtem Belevich; CHECK: ret; 953d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.w() 963d4964f4SArtem Belevich ret i32 %x 973d4964f4SArtem Belevich} 983d4964f4SArtem Belevich 993d4964f4SArtem Belevich; CHECK-LABEL: test_cluster_ctarank( 1003d4964f4SArtem Belevichdefine i32 @test_cluster_ctarank() { 1013d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %cluster_ctarank; 1023d4964f4SArtem Belevich; CHECK: ret; 1033d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.cluster.ctarank() 1043d4964f4SArtem Belevich ret i32 %x 1053d4964f4SArtem Belevich} 1063d4964f4SArtem Belevich 1073d4964f4SArtem Belevich; CHECK-LABEL: test_cluster_nctarank( 1083d4964f4SArtem Belevichdefine i32 @test_cluster_nctarank() { 1093d4964f4SArtem Belevich; CHECK: mov.u32 %r{{[0-9]+}}, %cluster_nctarank; 1103d4964f4SArtem Belevich; CHECK: ret; 1113d4964f4SArtem Belevich %x = call i32 @llvm.nvvm.read.ptx.sreg.cluster.nctarank() 1123d4964f4SArtem Belevich ret i32 %x 1133d4964f4SArtem Belevich} 1143d4964f4SArtem Belevich 1153d4964f4SArtem Belevich; CHECK-LABEL: test_is_explicit_cluster( 1163d4964f4SArtem Belevichdefine i1 @test_is_explicit_cluster() { 1173d4964f4SArtem Belevich; CHECK: mov.pred %p{{[0-9]+}}, %is_explicit_cluster; 1183d4964f4SArtem Belevich; CHECK: ret; 1193d4964f4SArtem Belevich %x = call i1 @llvm.nvvm.is_explicit_cluster() 1203d4964f4SArtem Belevich ret i1 %x 1213d4964f4SArtem Belevich} 1223d4964f4SArtem Belevich 12325708b3dSArtem Belevich; CHECK-LABEL: test_barrier_cluster( 12425708b3dSArtem Belevichdefine void @test_barrier_cluster() { 12525708b3dSArtem Belevich; CHECK: barrier.cluster.arrive; 12625708b3dSArtem Belevich call void @llvm.nvvm.barrier.cluster.arrive() 12725708b3dSArtem Belevich; CHECK: barrier.cluster.arrive.relaxed; 12825708b3dSArtem Belevich call void @llvm.nvvm.barrier.cluster.arrive.relaxed() 12925708b3dSArtem Belevich; CHECK: barrier.cluster.wait; 13025708b3dSArtem Belevich call void @llvm.nvvm.barrier.cluster.wait() 13125708b3dSArtem Belevich; CHECK: fence.sc.cluster 13225708b3dSArtem Belevich call void @llvm.nvvm.fence.sc.cluster() 13325708b3dSArtem Belevich ret void 13425708b3dSArtem Belevich} 13525708b3dSArtem Belevich 1368d817f64SDurgadoss R; CHECK-LABEL: test_barrier_cluster_aligned( 1378d817f64SDurgadoss Rdefine void @test_barrier_cluster_aligned() { 1388d817f64SDurgadoss R; CHECK: barrier.cluster.arrive.aligned; 1398d817f64SDurgadoss R call void @llvm.nvvm.barrier.cluster.arrive.aligned() 1408d817f64SDurgadoss R; CHECK: barrier.cluster.arrive.relaxed.aligned; 1418d817f64SDurgadoss R call void @llvm.nvvm.barrier.cluster.arrive.relaxed.aligned() 1428d817f64SDurgadoss R; CHECK: barrier.cluster.wait.aligned; 1438d817f64SDurgadoss R call void @llvm.nvvm.barrier.cluster.wait.aligned() 1448d817f64SDurgadoss R ret void 1458d817f64SDurgadoss R} 1463d4964f4SArtem Belevich 14743531e71SDurgadoss R; CHECK-LABEL: test_cp_async_bulk_commit_group( 14843531e71SDurgadoss Rdefine void @test_cp_async_bulk_commit_group() { 14943531e71SDurgadoss R; CHECK: cp.async.bulk.commit_group; 15043531e71SDurgadoss R call void @llvm.nvvm.cp.async.bulk.commit.group() 15143531e71SDurgadoss R ret void 15243531e71SDurgadoss R} 15343531e71SDurgadoss R 15443531e71SDurgadoss R; CHECK-LABEL: test_cp_async_bulk_wait_group( 15543531e71SDurgadoss Rdefine void @test_cp_async_bulk_wait_group() { 15643531e71SDurgadoss R; CHECK: cp.async.bulk.wait_group 8; 15743531e71SDurgadoss R call void @llvm.nvvm.cp.async.bulk.wait.group(i32 8) 15843531e71SDurgadoss R; CHECK: cp.async.bulk.wait_group 0; 15943531e71SDurgadoss R call void @llvm.nvvm.cp.async.bulk.wait.group(i32 0) 16043531e71SDurgadoss R ret void 16143531e71SDurgadoss R} 16243531e71SDurgadoss R 16343531e71SDurgadoss R; CHECK-LABEL: test_cp_async_bulk_wait_group_read( 16443531e71SDurgadoss Rdefine void @test_cp_async_bulk_wait_group_read() { 16543531e71SDurgadoss R; CHECK: cp.async.bulk.wait_group.read 8; 16643531e71SDurgadoss R call void @llvm.nvvm.cp.async.bulk.wait.group.read(i32 8) 16743531e71SDurgadoss R; CHECK: cp.async.bulk.wait_group.read 0; 16843531e71SDurgadoss R call void @llvm.nvvm.cp.async.bulk.wait.group.read(i32 0) 16943531e71SDurgadoss R ret void 17043531e71SDurgadoss R} 17143531e71SDurgadoss R 1723d4964f4SArtem Belevichdeclare i1 @llvm.nvvm.isspacep.shared.cluster(ptr %p); 1733d4964f4SArtem Belevichdeclare ptr @llvm.nvvm.mapa(ptr %p, i32 %r); 1743d4964f4SArtem Belevichdeclare ptr addrspace(3) @llvm.nvvm.mapa.shared.cluster(ptr addrspace(3) %p, i32 %r); 1753d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.getctarank(ptr %p); 1763d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.getctarank.shared.cluster(ptr addrspace(3) %p); 1773d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.clusterid.x() 1783d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.clusterid.y() 1793d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.clusterid.z() 1803d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.clusterid.w() 1813d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.x() 1823d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.y() 1833d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.z() 1843d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.w() 1853d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.cluster.ctarank() 1863d4964f4SArtem Belevichdeclare i32 @llvm.nvvm.read.ptx.sreg.cluster.nctarank() 1873d4964f4SArtem Belevichdeclare i1 @llvm.nvvm.is_explicit_cluster() 18825708b3dSArtem Belevichdeclare void @llvm.nvvm.barrier.cluster.arrive() 18925708b3dSArtem Belevichdeclare void @llvm.nvvm.barrier.cluster.arrive.relaxed() 19025708b3dSArtem Belevichdeclare void @llvm.nvvm.barrier.cluster.wait() 1918d817f64SDurgadoss Rdeclare void @llvm.nvvm.barrier.cluster.arrive.aligned() 1928d817f64SDurgadoss Rdeclare void @llvm.nvvm.barrier.cluster.arrive.relaxed.aligned() 1938d817f64SDurgadoss Rdeclare void @llvm.nvvm.barrier.cluster.wait.aligned() 19425708b3dSArtem Belevichdeclare void @llvm.nvvm.fence.sc.cluster() 19543531e71SDurgadoss Rdeclare void @llvm.nvvm.cp.async.bulk.commit.group() 19643531e71SDurgadoss Rdeclare void @llvm.nvvm.cp.async.bulk.wait.group(i32) 19743531e71SDurgadoss Rdeclare void @llvm.nvvm.cp.async.bulk.wait.group.read(i32) 198