brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 17ec27b Raw
178 lines · plain
1; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -O2 -tail-dup-size=1000 -tail-dup-placement-threshold=1000 -enable-tail-merge=0 < %s | FileCheck -enable-var-scope -check-prefix=GCN %s2 3; Need to to trigger tail duplication this during4; MachineBlockPlacement, since calls aren't tail duplicated pre-RA.5 6declare void @nonconvergent_func() #07declare void @convergent_func() #18declare void @llvm.amdgcn.s.barrier() #19declare void @llvm.amdgcn.ds.gws.init(i32, i32) #210declare void @llvm.amdgcn.ds.gws.barrier(i32, i32) #211declare void @llvm.amdgcn.ds.gws.sema.release.all(i32 %offset) #212 13; barrier shouldn't be duplicated.14 15; GCN-LABEL: {{^}}taildup_barrier:16; GCN: s_barrier17; GCN-NOT: s_barrier18define void @taildup_barrier(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond) #0 {19entry:20  br i1 %cond, label %bb1, label %bb221 22bb1:23  store i32 0, ptr addrspace(1) %a24  br label %call25 26bb2:27  store i32 1, ptr addrspace(1) %a28  br label %call29 30call:31  call void @llvm.amdgcn.s.barrier()32  br label %ret33 34ret:35  ret void36}37 38; GCN-LABEL: {{^}}taildup_convergent_call:39; GCN: s_swappc_b6440; GCN-NOT: s_swappc_b6441define void @taildup_convergent_call(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond) #1 {42entry:43  br i1 %cond, label %bb1, label %bb244 45bb1:46  store i32 0, ptr addrspace(1) %a47  br label %call48 49bb2:50  store i32 1, ptr addrspace(1) %a51  br label %call52 53call:54  call void @convergent_func()55  br label %ret56 57ret:58  ret void59}60 61; TODO: Currently there is only one convergent call pseudo, but this62; theoretically could use a nonconvergent variant.63; GCN-LABEL: {{^}}taildup_nonconvergent_call:64; GCN: s_swappc_b6465; GCN-NOT: s_swappc_b6466define void @taildup_nonconvergent_call(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond) #1 {67entry:68  br i1 %cond, label %bb1, label %bb269 70bb1:71  store i32 0, ptr addrspace(1) %a72  br label %call73 74bb2:75  store i32 1, ptr addrspace(1) %a76  br label %call77 78call:79  call void @nonconvergent_func()80  br label %ret81 82ret:83  ret void84}85 86; GCN-LABEL: {{^}}taildup_convergent_tailcall:87; GCN: s_setpc_b6488; GCN-NOT: s_setpc_b6489define void @taildup_convergent_tailcall(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond) #1 {90entry:91  br i1 %cond, label %bb1, label %bb292 93bb1:94  store i32 0, ptr addrspace(1) %a95  br label %call96 97bb2:98  store i32 1, ptr addrspace(1) %a99  br label %call100 101call:102  tail call void @convergent_func()103  ret void104}105 106; GCN-LABEL: {{^}}taildup_gws_init:107; GCN: ds_gws_init108; GCN-NOT: ds_gws_init109define amdgpu_kernel void @taildup_gws_init(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond, i32 %val, i32 %offset) #0 {110entry:111  br i1 %cond, label %bb1, label %bb2112 113bb1:114  store i32 0, ptr addrspace(1) %a115  br label %call116 117bb2:118  store i32 1, ptr addrspace(1) %a119  br label %call120 121call:122  call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 %offset)123  br label %ret124 125ret:126  ret void127}128 129; GCN-LABEL: {{^}}taildup_gws_barrier:130; GCN: ds_gws_barrier131; GCN-NOT: ds_gws_barrier132define amdgpu_kernel void @taildup_gws_barrier(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond, i32 %val, i32 %offset) #0 {133entry:134  br i1 %cond, label %bb1, label %bb2135 136bb1:137  store i32 0, ptr addrspace(1) %a138  br label %call139 140bb2:141  store i32 1, ptr addrspace(1) %a142  br label %call143 144call:145  call void @llvm.amdgcn.ds.gws.barrier(i32 %val, i32 %offset)146  br label %ret147 148ret:149  ret void150}151 152; GCN-LABEL: {{^}}taildup_gws_sema_release_all:153; GCN: ds_gws_sema_release_all154; GCN-NOT: ds_gws155define amdgpu_kernel void @taildup_gws_sema_release_all(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %cond, i32 %offset) #0 {156entry:157  br i1 %cond, label %bb1, label %bb2158 159bb1:160  store i32 0, ptr addrspace(1) %a161  br label %call162 163bb2:164  store i32 1, ptr addrspace(1) %a165  br label %call166 167call:168  call void @llvm.amdgcn.ds.gws.sema.release.all(i32 %offset)169  br label %ret170 171ret:172  ret void173}174 175attributes #0 = { nounwind }176attributes #1 = { nounwind convergent }177attributes #2 = { convergent inaccessiblememonly nounwind }178