197 lines
6.6 KiB
LLVM
197 lines
6.6 KiB
LLVM
; RUN: llc < %s -march=nvptx64 -mcpu=sm_90 -mattr=+ptx80| FileCheck --check-prefixes=CHECK %s
|
|
; RUN: %if ptxas-12.0 %{ llc < %s -march=nvptx64 -mcpu=sm_90 -mattr=+ptx80| %ptxas-verify -arch=sm_90 %}
|
|
|
|
; CHECK-LABEL: test_isspacep
|
|
define i1 @test_isspacep_shared_cluster(ptr %p) {
|
|
; CHECK: isspacep.shared::cluster
|
|
%a = tail call i1 @llvm.nvvm.isspacep.shared.cluster(ptr %p)
|
|
; CHECK: ret
|
|
ret i1 %a
|
|
}
|
|
|
|
; CHECK-LABEL: test_mapa(
|
|
define ptr @test_mapa(ptr %p, i32 %r) {
|
|
; CHECK64: mapa.u64
|
|
%a = call ptr @llvm.nvvm.mapa(ptr %p, i32 %r)
|
|
ret ptr %a
|
|
}
|
|
|
|
; CHECK-LABEL: test_mapa_shared_cluster(
|
|
define ptr addrspace(3) @test_mapa_shared_cluster(ptr addrspace(3) %p, i32 %r) {
|
|
; CHECK: mapa.shared::cluster.u64
|
|
%a = call ptr addrspace(3) @llvm.nvvm.mapa.shared.cluster(ptr addrspace(3) %p, i32 %r)
|
|
ret ptr addrspace(3) %a
|
|
}
|
|
|
|
; CHECK-LABEL: test_getctarank(
|
|
define i32 @test_getctarank(ptr %p) {
|
|
; CHECK: getctarank.u64
|
|
%a = call i32 @llvm.nvvm.getctarank(ptr %p)
|
|
ret i32 %a
|
|
}
|
|
|
|
; CHECK-LABEL: test_getctarank_shared_cluster(
|
|
define i32 @test_getctarank_shared_cluster(ptr addrspace(3) %p) {
|
|
; CHECK64: getctarank.shared::cluster.u64
|
|
; CHECK32: getctarank.shared::cluster.u32
|
|
%a = call i32 @llvm.nvvm.getctarank.shared.cluster(ptr addrspace(3) %p)
|
|
ret i32 %a
|
|
}
|
|
|
|
; CHECK-LABEL: test_clusterid_x(
|
|
define i32 @test_clusterid_x() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.x;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.x()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_clusterid_y(
|
|
define i32 @test_clusterid_y() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.y;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.y()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_clusterid_z(
|
|
define i32 @test_clusterid_z() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.z;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.z()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_clusterid_w(
|
|
define i32 @test_clusterid_w() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %clusterid.w;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.clusterid.w()
|
|
ret i32 %x
|
|
}
|
|
|
|
; CHECK-LABEL: test_nclusterid_x(
|
|
define i32 @test_nclusterid_x() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.x;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.x()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_nclusterid_y(
|
|
define i32 @test_nclusterid_y() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.y;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.y()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_nclusterid_z(
|
|
define i32 @test_nclusterid_z() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.z;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.z()
|
|
ret i32 %x
|
|
}
|
|
; CHECK-LABEL: test_nclusterid_w(
|
|
define i32 @test_nclusterid_w() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %nclusterid.w;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.nclusterid.w()
|
|
ret i32 %x
|
|
}
|
|
|
|
; CHECK-LABEL: test_cluster_ctarank(
|
|
define i32 @test_cluster_ctarank() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %cluster_ctarank;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.cluster.ctarank()
|
|
ret i32 %x
|
|
}
|
|
|
|
; CHECK-LABEL: test_cluster_nctarank(
|
|
define i32 @test_cluster_nctarank() {
|
|
; CHECK: mov.u32 %r{{[0-9]+}}, %cluster_nctarank;
|
|
; CHECK: ret;
|
|
%x = call i32 @llvm.nvvm.read.ptx.sreg.cluster.nctarank()
|
|
ret i32 %x
|
|
}
|
|
|
|
; CHECK-LABEL: test_is_explicit_cluster(
|
|
define i1 @test_is_explicit_cluster() {
|
|
; CHECK: mov.pred %p{{[0-9]+}}, %is_explicit_cluster;
|
|
; CHECK: ret;
|
|
%x = call i1 @llvm.nvvm.is_explicit_cluster()
|
|
ret i1 %x
|
|
}
|
|
|
|
; CHECK-LABEL: test_barrier_cluster(
|
|
define void @test_barrier_cluster() {
|
|
; CHECK: barrier.cluster.arrive;
|
|
call void @llvm.nvvm.barrier.cluster.arrive()
|
|
; CHECK: barrier.cluster.arrive.relaxed;
|
|
call void @llvm.nvvm.barrier.cluster.arrive.relaxed()
|
|
; CHECK: barrier.cluster.wait;
|
|
call void @llvm.nvvm.barrier.cluster.wait()
|
|
; CHECK: fence.sc.cluster
|
|
call void @llvm.nvvm.fence.sc.cluster()
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: test_barrier_cluster_aligned(
|
|
define void @test_barrier_cluster_aligned() {
|
|
; CHECK: barrier.cluster.arrive.aligned;
|
|
call void @llvm.nvvm.barrier.cluster.arrive.aligned()
|
|
; CHECK: barrier.cluster.arrive.relaxed.aligned;
|
|
call void @llvm.nvvm.barrier.cluster.arrive.relaxed.aligned()
|
|
; CHECK: barrier.cluster.wait.aligned;
|
|
call void @llvm.nvvm.barrier.cluster.wait.aligned()
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: test_cp_async_bulk_commit_group(
|
|
define void @test_cp_async_bulk_commit_group() {
|
|
; CHECK: cp.async.bulk.commit_group;
|
|
call void @llvm.nvvm.cp.async.bulk.commit.group()
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: test_cp_async_bulk_wait_group(
|
|
define void @test_cp_async_bulk_wait_group() {
|
|
; CHECK: cp.async.bulk.wait_group 8;
|
|
call void @llvm.nvvm.cp.async.bulk.wait.group(i32 8)
|
|
; CHECK: cp.async.bulk.wait_group 0;
|
|
call void @llvm.nvvm.cp.async.bulk.wait.group(i32 0)
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: test_cp_async_bulk_wait_group_read(
|
|
define void @test_cp_async_bulk_wait_group_read() {
|
|
; CHECK: cp.async.bulk.wait_group.read 8;
|
|
call void @llvm.nvvm.cp.async.bulk.wait.group.read(i32 8)
|
|
; CHECK: cp.async.bulk.wait_group.read 0;
|
|
call void @llvm.nvvm.cp.async.bulk.wait.group.read(i32 0)
|
|
ret void
|
|
}
|
|
|
|
declare i1 @llvm.nvvm.isspacep.shared.cluster(ptr %p);
|
|
declare ptr @llvm.nvvm.mapa(ptr %p, i32 %r);
|
|
declare ptr addrspace(3) @llvm.nvvm.mapa.shared.cluster(ptr addrspace(3) %p, i32 %r);
|
|
declare i32 @llvm.nvvm.getctarank(ptr %p);
|
|
declare i32 @llvm.nvvm.getctarank.shared.cluster(ptr addrspace(3) %p);
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.clusterid.x()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.clusterid.y()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.clusterid.z()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.clusterid.w()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.x()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.y()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.z()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.nclusterid.w()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.cluster.ctarank()
|
|
declare i32 @llvm.nvvm.read.ptx.sreg.cluster.nctarank()
|
|
declare i1 @llvm.nvvm.is_explicit_cluster()
|
|
declare void @llvm.nvvm.barrier.cluster.arrive()
|
|
declare void @llvm.nvvm.barrier.cluster.arrive.relaxed()
|
|
declare void @llvm.nvvm.barrier.cluster.wait()
|
|
declare void @llvm.nvvm.barrier.cluster.arrive.aligned()
|
|
declare void @llvm.nvvm.barrier.cluster.arrive.relaxed.aligned()
|
|
declare void @llvm.nvvm.barrier.cluster.wait.aligned()
|
|
declare void @llvm.nvvm.fence.sc.cluster()
|
|
declare void @llvm.nvvm.cp.async.bulk.commit.group()
|
|
declare void @llvm.nvvm.cp.async.bulk.wait.group(i32)
|
|
declare void @llvm.nvvm.cp.async.bulk.wait.group.read(i32)
|