diff options
author | Wei Ding <wei.ding2@amd.com> | 2016-06-22 18:51:08 +0000 |
---|---|---|
committer | Wei Ding <wei.ding2@amd.com> | 2016-06-22 18:51:08 +0000 |
commit | 0526e7f8d907840f1aa600ee366006eec3ecba4f (patch) | |
tree | edf531d08f31a5ebebc89584f06d9f82032f4bb6 /llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll | |
parent | c4871eddb717c5e5a6579a8b6306ed371ecd6031 (diff) | |
download | bcm5719-llvm-0526e7f8d907840f1aa600ee366006eec3ecba4f.tar.gz bcm5719-llvm-0526e7f8d907840f1aa600ee366006eec3ecba4f.zip |
AMDGPU: Add convergent flag to INLINEASM instruction.
Differential Revision: http://reviews.llvm.org/D21214
llvm-svn: 273455
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll')
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll b/llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll new file mode 100644 index 00000000000..55a38e576ad --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll @@ -0,0 +1,45 @@ +; RUN: llc -mtriple=amdgcn--amdhsa -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s + +declare i32 @llvm.amdgcn.workitem.id.x() #0 +; GCN-LABEL: {{^}}convergent_inlineasm: +; GCN: BB#0: +; GCN: v_cmp_ne_i32_e64 +; GCN: BB#1: +define void @convergent_inlineasm(i64 addrspace(1)* nocapture %arg) { +bb: + %tmp = call i32 @llvm.amdgcn.workitem.id.x() + %tmp1 = tail call i64 asm "v_cmp_ne_i32_e64 $0, 0, $1", "=s,v"(i32 1) #1 + %tmp2 = icmp eq i32 %tmp, 8 + br i1 %tmp2, label %bb3, label %bb5 + +bb3: ; preds = %bb + %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp + store i64 %tmp1, i64 addrspace(1)* %arg, align 8 + br label %bb5 + +bb5: ; preds = %bb3, %bb + ret void +} + +; GCN-LABEL: {{^}}nonconvergent_inlineasm: +; GCN: BB#1: +; GCN: v_cmp_ne_i32_e64 +; GCN: BB1_2: +define void @nonconvergent_inlineasm(i64 addrspace(1)* nocapture %arg) { +bb: + %tmp = call i32 @llvm.amdgcn.workitem.id.x() + %tmp1 = tail call i64 asm "v_cmp_ne_i32_e64 $0, 0, $1", "=s,v"(i32 1) + %tmp2 = icmp eq i32 %tmp, 8 + br i1 %tmp2, label %bb3, label %bb5 + +bb3: ; preds = %bb + %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp + store i64 %tmp1, i64 addrspace(1)* %arg, align 8 + br label %bb5 + +bb5: ; preds = %bb3, %bb + ret void +} + +attributes #0 = { nounwind readnone } +attributes #1 = { convergent nounwind readnone } |