1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2 3; GCN-LABEL: {{^}}if_with_kill: 4; GCN: s_and_saveexec_b64 [[SAVEEXEC:s\[[0-9:]+\]]], 5; GCN-NEXT: s_xor_b64 s[{{[0-9:]+}}], exec, [[SAVEEXEC]] 6define amdgpu_ps void @if_with_kill(i32 %arg) { 7.entry: 8 %cmp = icmp eq i32 %arg, 32 9 br i1 %cmp, label %then, label %endif 10 11then: 12 tail call void @llvm.amdgcn.kill(i1 false) 13 br label %endif 14 15endif: 16 ret void 17} 18 19; GCN-LABEL: {{^}}if_with_loop_kill_after: 20; GCN: s_and_saveexec_b64 [[SAVEEXEC:s\[[0-9:]+\]]], 21; GCN-NEXT: s_xor_b64 s[{{[0-9:]+}}], exec, [[SAVEEXEC]] 22define amdgpu_ps void @if_with_loop_kill_after(i32 %arg) { 23.entry: 24 %cmp = icmp eq i32 %arg, 32 25 br i1 %cmp, label %then, label %endif 26 27then: 28 %sub = sub i32 %arg, 1 29 br label %loop 30 31loop: 32 %ind = phi i32 [%sub, %then], [%dec, %loop] 33 %dec = sub i32 %ind, 1 34 %cc = icmp ne i32 %ind, 0 35 br i1 %cc, label %loop, label %break 36 37break: 38 tail call void @llvm.amdgcn.kill(i1 false) 39 br label %endif 40 41endif: 42 ret void 43} 44 45; GCN-LABEL: {{^}}if_with_kill_inside_loop: 46; GCN: s_and_saveexec_b64 [[SAVEEXEC:s\[[0-9:]+\]]], 47; GCN-NEXT: s_xor_b64 s[{{[0-9:]+}}], exec, [[SAVEEXEC]] 48define amdgpu_ps void @if_with_kill_inside_loop(i32 %arg) { 49.entry: 50 %cmp = icmp eq i32 %arg, 32 51 br i1 %cmp, label %then, label %endif 52 53then: 54 %sub = sub i32 %arg, 1 55 br label %loop 56 57loop: 58 %ind = phi i32 [%sub, %then], [%dec, %loop] 59 %dec = sub i32 %ind, 1 60 %cc = icmp ne i32 %ind, 0 61 tail call void @llvm.amdgcn.kill(i1 false) 62 br i1 %cc, label %loop, label %break 63 64break: 65 br label %endif 66 67endif: 68 ret void 69} 70 71declare void @llvm.amdgcn.kill(i1) #0 72 73attributes #0 = { nounwind } 74