diff options
| author | Artem Belevich <tra@google.com> | 2017-09-21 18:44:49 +0000 |
|---|---|---|
| committer | Artem Belevich <tra@google.com> | 2017-09-21 18:44:49 +0000 |
| commit | 42960b41883a9cc0aed6d1e42c851914893f5600 (patch) | |
| tree | 26f7d407689f505269483c2486e8b9545336ad2c /llvm/test/CodeGen/NVPTX | |
| parent | ddf524c031947ffd495ff4fda9f78be28b05959f (diff) | |
| download | bcm5719-llvm-42960b41883a9cc0aed6d1e42c851914893f5600.tar.gz bcm5719-llvm-42960b41883a9cc0aed6d1e42c851914893f5600.zip | |
[NVPTX] Implemented bar.warp.sync, barrier.sync, and vote{.sync} instructions/intrinsics/builtins.
Differential Revision: https://reviews.llvm.org/D38148
llvm-svn: 313898
Diffstat (limited to 'llvm/test/CodeGen/NVPTX')
| -rw-r--r-- | llvm/test/CodeGen/NVPTX/barrier.ll | 32 | ||||
| -rw-r--r-- | llvm/test/CodeGen/NVPTX/vote.ll | 65 |
2 files changed, 97 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/NVPTX/barrier.ll b/llvm/test/CodeGen/NVPTX/barrier.ll new file mode 100644 index 00000000000..0bca04e6dda --- /dev/null +++ b/llvm/test/CodeGen/NVPTX/barrier.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx60 | FileCheck %s + +declare void @llvm.nvvm.bar.warp.sync(i32) +declare void @llvm.nvvm.barrier.sync(i32) +declare void @llvm.nvvm.barrier.sync.cnt(i32, i32) + +; CHECK-LABEL: .func{{.*}}barrier.sync +define void @barrier.sync(i32 %id, i32 %cnt) { + ; CHECK: ld.param.u32 [[ID:%r[0-9]+]], [barrier.sync_param_0]; + ; CHECK: ld.param.u32 [[CNT:%r[0-9]+]], [barrier.sync_param_1]; + + ; CHECK: barrier.sync [[ID]], [[CNT]]; + call void @llvm.nvvm.barrier.sync.cnt(i32 %id, i32 %cnt) + ; CHECK: barrier.sync [[ID]], 2; + call void @llvm.nvvm.barrier.sync.cnt(i32 %id, i32 2) + ; CHECK: barrier.sync 3, [[CNT]]; + call void @llvm.nvvm.barrier.sync.cnt(i32 3, i32 %cnt) + ; CHECK: barrier.sync 4, 5; + call void @llvm.nvvm.barrier.sync.cnt(i32 4, i32 5) + + ; CHECK: barrier.sync [[ID]]; + call void @llvm.nvvm.barrier.sync(i32 %id) + ; CHECK: barrier.sync 1; + call void @llvm.nvvm.barrier.sync(i32 1) + + ; CHECK: bar.warp.sync [[ID]]; + call void @llvm.nvvm.bar.warp.sync(i32 %id) + ; CHECK: bar.warp.sync 6; + call void @llvm.nvvm.bar.warp.sync(i32 6) + ret void; +} + diff --git a/llvm/test/CodeGen/NVPTX/vote.ll b/llvm/test/CodeGen/NVPTX/vote.ll new file mode 100644 index 00000000000..c28e795fe57 --- /dev/null +++ b/llvm/test/CodeGen/NVPTX/vote.ll @@ -0,0 +1,65 @@ +; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx60 | FileCheck %s + +declare i1 @llvm.nvvm.vote.all(i1) +; CHECK-LABEL: .func{{.*}}vote.all +define i1 @vote.all(i1 %pred) { + ; CHECK: vote.all.pred + %val = call i1 @llvm.nvvm.vote.all(i1 %pred) + ret i1 %val +} + +declare i1 @llvm.nvvm.vote.any(i1) +; CHECK-LABEL: .func{{.*}}vote.any +define i1 @vote.any(i1 %pred) { + ; CHECK: vote.any.pred + %val = call i1 @llvm.nvvm.vote.any(i1 %pred) + ret i1 %val +} + +declare i1 @llvm.nvvm.vote.uni(i1) +; CHECK-LABEL: .func{{.*}}vote.uni +define i1 @vote.uni(i1 %pred) { + ; CHECK: vote.uni.pred + %val = call i1 @llvm.nvvm.vote.uni(i1 %pred) + ret i1 %val +} + +declare i32 @llvm.nvvm.vote.ballot(i1) +; CHECK-LABEL: .func{{.*}}vote.ballot +define i32 @vote.ballot(i1 %pred) { + ; CHECK: vote.ballot.b32 + %val = call i32 @llvm.nvvm.vote.ballot(i1 %pred) + ret i32 %val +} + +declare i1 @llvm.nvvm.vote.all.sync(i32, i1) +; CHECK-LABEL: .func{{.*}}vote.sync.all +define i1 @vote.sync.all(i32 %mask, i1 %pred) { + ; CHECK: vote.sync.all.pred + %val = call i1 @llvm.nvvm.vote.all.sync(i32 %mask, i1 %pred) + ret i1 %val +} + +declare i1 @llvm.nvvm.vote.any.sync(i32, i1) +; CHECK-LABEL: .func{{.*}}vote.sync.any +define i1 @vote.sync.any(i32 %mask, i1 %pred) { + ; CHECK: vote.sync.any.pred + %val = call i1 @llvm.nvvm.vote.any.sync(i32 %mask, i1 %pred) + ret i1 %val +} + +declare i1 @llvm.nvvm.vote.uni.sync(i32, i1) +; CHECK-LABEL: .func{{.*}}vote.sync.uni +define i1 @vote.sync.uni(i32 %mask, i1 %pred) { + ; CHECK: vote.sync.uni.pred + %val = call i1 @llvm.nvvm.vote.uni.sync(i32 %mask, i1 %pred) + ret i1 %val +} + +declare i32 @llvm.nvvm.vote.ballot.sync(i32, i1) +; CHECK-LABEL: .func{{.*}}vote.sync.ballot +define i32 @vote.sync.ballot(i32 %mask, i1 %pred) { + ; CHECK: vote.sync.ballot.b32 + %val = call i32 @llvm.nvvm.vote.ballot.sync(i32 %mask, i1 %pred) + ret i32 %val +} |

