diff options
author | Wei Ding <wei.ding2@amd.com> | 2016-07-28 16:42:13 +0000 |
---|---|---|
committer | Wei Ding <wei.ding2@amd.com> | 2016-07-28 16:42:13 +0000 |
commit | 07e03712d3cdedba094a567f0fecbb8e5feba535 (patch) | |
tree | 2ba3ed25d4fc760d1bf2b27d5e1ce64f69da21a9 /llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll | |
parent | 89217f8835ede9729f15698095fbf7264e8c16aa (diff) | |
download | bcm5719-llvm-07e03712d3cdedba094a567f0fecbb8e5feba535.tar.gz bcm5719-llvm-07e03712d3cdedba094a567f0fecbb8e5feba535.zip |
AMDGPU : Add intrinsics for compare with the full wavefront result
Differential Revision: http://reviews.llvm.org/D22482
llvm-svn: 276998
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll')
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll new file mode 100644 index 00000000000..0797e5ead00 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.icmp.ll @@ -0,0 +1,172 @@ +; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s + +declare i64 @llvm.amdgcn.icmp.i32(i32, i32, i32) #0 +declare i64 @llvm.amdgcn.icmp.i64(i64, i64, i32) #0 + +; GCN-LABEL: {{^}}v_icmp_i32_eq: +; GCN: v_cmp_eq_i32_e64 +define void @v_icmp_i32_eq(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 32) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp: +; GCN-NOT: v_cmp_eq_i32_e64 +define void @v_icmp(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 30) + store i64 %result, i64 addrspace(1)* %out + ret void +} +; GCN-LABEL: {{^}}v_icmp_i32_ne: +; GCN: v_cmp_ne_i32_e64 +define void @v_icmp_i32_ne(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 33) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u32_ugt: +; GCN: v_cmp_gt_u32_e64 +define void @v_icmp_u32_ugt(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 34) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u32_uge: +; GCN: v_cmp_ge_u32_e64 +define void @v_icmp_u32_uge(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 35) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u32_ult: +; GCN: v_cmp_lt_u32_e64 +define void @v_icmp_u32_ult(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 36) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u32_ule: +; GCN: v_cmp_le_u32_e64 +define void @v_icmp_u32_ule(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 37) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i32_sgt: +; GCN: v_cmp_gt_i32_e64 +define void @v_icmp_i32_sgt(i64 addrspace(1)* %out, i32 %src) #1 { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 38) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i32_sge: +; GCN: v_cmp_ge_i32_e64 +define void @v_icmp_i32_sge(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 39) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i32_slt: +; GCN: v_cmp_lt_i32_e64 +define void @v_icmp_i32_slt(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 40) + store i64 %result, i64 addrspace(1)* %out + ret void +} +; GCN-LABEL: {{^}}v_icmp_i32_sle: +; GCN: v_cmp_le_i32_e64 +define void @v_icmp_i32_sle(i64 addrspace(1)* %out, i32 %src) { + %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 41) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i64_eq: +; GCN: v_cmp_eq_i64_e64 +define void @v_icmp_i64_eq(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 32) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i64_ne: +; GCN: v_cmp_ne_i64_e64 +define void @v_icmp_i64_ne(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 33) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u64_ugt: +; GCN: v_cmp_gt_u64_e64 +define void @v_icmp_u64_ugt(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 34) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u64_uge: +; GCN: v_cmp_ge_u64_e64 +define void @v_icmp_u64_uge(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 35) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u64_ult: +; GCN: v_cmp_lt_u64_e64 +define void @v_icmp_u64_ult(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 36) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_u64_ule: +; GCN: v_cmp_le_u64_e64 +define void @v_icmp_u64_ule(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 37) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i64_sgt: +; GCN: v_cmp_gt_i64_e64 +define void @v_icmp_i64_sgt(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 38) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i64_sge: +; GCN: v_cmp_ge_i64_e64 +define void @v_icmp_i64_sge(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 39) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +; GCN-LABEL: {{^}}v_icmp_i64_slt: +; GCN: v_cmp_lt_i64_e64 +define void @v_icmp_i64_slt(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 40) + store i64 %result, i64 addrspace(1)* %out + ret void +} +; GCN-LABEL: {{^}}v_icmp_i64_sle: +; GCN: v_cmp_le_i64_e64 +define void @v_icmp_i64_sle(i64 addrspace(1)* %out, i64 %src) { + %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 41) + store i64 %result, i64 addrspace(1)* %out + ret void +} + +attributes #0 = { nounwind readnone convergent } |