Wei Ding | 0526e7f | 2016-06-22 18:51:08 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=amdgcn--amdhsa -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s |
| 2 | |
| 3 | declare i32 @llvm.amdgcn.workitem.id.x() #0 |
| 4 | ; GCN-LABEL: {{^}}convergent_inlineasm: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame^] | 5 | ; GCN: %bb.0: |
Matt Arsenault | 5d8eb25 | 2016-09-30 01:50:20 +0000 | [diff] [blame] | 6 | ; GCN: v_cmp_ne_u32_e64 |
Matt Arsenault | 57431c9 | 2016-08-10 19:11:42 +0000 | [diff] [blame] | 7 | ; GCN: ; mask branch |
| 8 | ; GCN: BB{{[0-9]+_[0-9]+}}: |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 9 | define amdgpu_kernel void @convergent_inlineasm(i64 addrspace(1)* nocapture %arg) { |
Wei Ding | 0526e7f | 2016-06-22 18:51:08 +0000 | [diff] [blame] | 10 | bb: |
| 11 | %tmp = call i32 @llvm.amdgcn.workitem.id.x() |
Matt Arsenault | 5d8eb25 | 2016-09-30 01:50:20 +0000 | [diff] [blame] | 12 | %tmp1 = tail call i64 asm "v_cmp_ne_u32_e64 $0, 0, $1", "=s,v"(i32 1) #1 |
Wei Ding | 0526e7f | 2016-06-22 18:51:08 +0000 | [diff] [blame] | 13 | %tmp2 = icmp eq i32 %tmp, 8 |
| 14 | br i1 %tmp2, label %bb3, label %bb5 |
| 15 | |
| 16 | bb3: ; preds = %bb |
| 17 | %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp |
| 18 | store i64 %tmp1, i64 addrspace(1)* %arg, align 8 |
| 19 | br label %bb5 |
| 20 | |
| 21 | bb5: ; preds = %bb3, %bb |
| 22 | ret void |
| 23 | } |
| 24 | |
| 25 | ; GCN-LABEL: {{^}}nonconvergent_inlineasm: |
Matt Arsenault | 57431c9 | 2016-08-10 19:11:42 +0000 | [diff] [blame] | 26 | ; GCN: ; mask branch |
| 27 | |
| 28 | ; GCN: BB{{[0-9]+_[0-9]+}}: |
Matt Arsenault | 5d8eb25 | 2016-09-30 01:50:20 +0000 | [diff] [blame] | 29 | ; GCN: v_cmp_ne_u32_e64 |
Matt Arsenault | 57431c9 | 2016-08-10 19:11:42 +0000 | [diff] [blame] | 30 | |
| 31 | ; GCN: BB{{[0-9]+_[0-9]+}}: |
Kyle Butt | 7fbec9b | 2017-02-15 19:49:14 +0000 | [diff] [blame] | 32 | |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 33 | define amdgpu_kernel void @nonconvergent_inlineasm(i64 addrspace(1)* nocapture %arg) { |
Wei Ding | 0526e7f | 2016-06-22 18:51:08 +0000 | [diff] [blame] | 34 | bb: |
| 35 | %tmp = call i32 @llvm.amdgcn.workitem.id.x() |
Matt Arsenault | 5d8eb25 | 2016-09-30 01:50:20 +0000 | [diff] [blame] | 36 | %tmp1 = tail call i64 asm "v_cmp_ne_u32_e64 $0, 0, $1", "=s,v"(i32 1) |
Wei Ding | 0526e7f | 2016-06-22 18:51:08 +0000 | [diff] [blame] | 37 | %tmp2 = icmp eq i32 %tmp, 8 |
| 38 | br i1 %tmp2, label %bb3, label %bb5 |
| 39 | |
| 40 | bb3: ; preds = %bb |
| 41 | %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp |
| 42 | store i64 %tmp1, i64 addrspace(1)* %arg, align 8 |
| 43 | br label %bb5 |
| 44 | |
| 45 | bb5: ; preds = %bb3, %bb |
| 46 | ret void |
| 47 | } |
| 48 | |
| 49 | attributes #0 = { nounwind readnone } |
| 50 | attributes #1 = { convergent nounwind readnone } |