xref: /llvm-project/llvm/test/CodeGen/NVPTX/intrinsics-sm90.ll (revision b279f6b098d3849f7f1c1f539b108307d5f8ae2d)
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