brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · b54a212 Raw
147 lines · plain
1; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SI,NOTGFX9 %s2; XUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SI,NOTGFX9 %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefixes=GCN,CIPLUS,NOTGFX9 %s4; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefixes=GCN,CIPLUS,NOTGFX9 %s5; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,CIPLUS,NOTGFX9 %s6; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,CIPLUS,NOTGFX9 %s7; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,CIPLUS,GFX9 %s8; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,CIPLUS,GFX9 %s9 10; GCN-LABEL: {{^}}ds_consume_lds:11; GCN: s_load_dword [[PTR:s[0-9]+]]12; GCN: s_mov_b32 m0, [[PTR]]13; GCN: ds_consume [[RESULT:v[0-9]+]]{{$}}14; GCN-NOT: buffer_wbinvl115; GCN: {{.*}}store{{.*}} [[RESULT]]16define amdgpu_kernel void @ds_consume_lds(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {17  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %lds, i1 false)18  store i32 %val, ptr addrspace(1) %out19  ret void20}21 22; GCN-LABEL: {{^}}ds_consume_lds_max_offset:23; GCN: s_load_dword [[PTR:s[0-9]+]]24; GCN: s_mov_b32 m0, [[PTR]]25; GCN: ds_consume [[RESULT:v[0-9]+]] offset:65532{{$}}26; GCN-NOT: buffer_wbinvl127; GCN: {{.*}}store{{.*}} [[RESULT]]28define amdgpu_kernel void @ds_consume_lds_max_offset(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {29  %gep = getelementptr inbounds i32, ptr addrspace(3) %lds, i32 1638330  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %gep, i1 false)31  store i32 %val, ptr addrspace(1) %out32  ret void33}34 35; GCN-LABEL: {{^}}ds_consume_no_fold_offset_si:36; GCN: s_load_dword [[PTR:s[0-9]+]]37 38; SI: s_add_i32 m0, [[PTR]], 1639; SI: ds_consume [[RESULT:v[0-9]+]]{{$}}40 41; CIPLUS: s_mov_b32 m0, [[PTR]]42; CIPLUS: ds_consume [[RESULT:v[0-9]+]] offset:16{{$}}43 44; GCN-NOT: buffer_wbinvl145; GCN: {{.*}}store{{.*}} [[RESULT]]46define amdgpu_kernel void @ds_consume_no_fold_offset_si(ptr addrspace(4) %lds.ptr, ptr addrspace(1) %out) #0 {47  %lds = load ptr addrspace(3), ptr addrspace(4) %lds.ptr, align 448  %gep = getelementptr inbounds i32, ptr addrspace(3) %lds, i32 449  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %gep, i1 false)50  store i32 %val, ptr addrspace(1) %out51  ret void52}53 54; GCN-LABEL: {{^}}ds_consume_lds_over_max_offset:55; GCN: s_load_dword [[PTR:s[0-9]+]]56 57; SI: s_or_b32 m0, [[PTR]], 0x1000058; CIPLUS: s_add_{{i|u}}32 m0, [[PTR]], 0x1000059; GCN: ds_consume [[RESULT:v[0-9]+]]{{$}}60; GCN-NOT: buffer_wbinvl161; GCN: {{.*}}store{{.*}} [[RESULT]]62define amdgpu_kernel void @ds_consume_lds_over_max_offset(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {63  %gep = getelementptr inbounds i32, ptr addrspace(3) %lds, i32 1638464  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %gep, i1 false)65  store i32 %val, ptr addrspace(1) %out66  ret void67}68 69; GCN-LABEL: {{^}}ds_consume_lds_vgpr_addr:70; GCN: v_readfirstlane_b32 [[READLANE:s[0-9]+]], v071; GCN: s_mov_b32 m0, [[READLANE]]72; GCN: ds_consume [[RESULT:v[0-9]+]]{{$}}73; GCN-NOT: buffer_wbinvl174; GCN: {{.*}}store{{.*}} [[RESULT]]75define void @ds_consume_lds_vgpr_addr(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {76  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %lds, i1 false)77  store i32 %val, ptr addrspace(1) %out78  ret void79}80 81; GCN-LABEL: {{^}}ds_consume_gds:82; GCN: s_load_dword [[PTR:s[0-9]+]]83; GCN: s_mov_b32 m0, [[PTR]]84; GCN: ds_consume [[RESULT:v[0-9]+]] gds{{$}}85; GCN-NOT: buffer_wbinvl186; GCN: {{.*}}store{{.*}} [[RESULT]]87define amdgpu_kernel void @ds_consume_gds(ptr addrspace(2) %gds, ptr addrspace(1) %out) #0 {88  %val = call i32 @llvm.amdgcn.ds.consume.p2(ptr addrspace(2) %gds, i1 false)89  store i32 %val, ptr addrspace(1) %out90  ret void91}92 93; GCN-LABEL: {{^}}ds_consume_gds_max_offset:94; GCN: s_load_dword [[PTR:s[0-9]+]]95; GCN: s_mov_b32 m0, [[PTR]]96; GCN: ds_consume [[RESULT:v[0-9]+]] offset:65532 gds{{$}}97; GCN-NOT: buffer_wbinvl198; GCN: {{.*}}store{{.*}} [[RESULT]]99define amdgpu_kernel void @ds_consume_gds_max_offset(ptr addrspace(2) %gds, ptr addrspace(1) %out) #0 {100  %gep = getelementptr inbounds i32, ptr addrspace(2) %gds, i32 16383101  %val = call i32 @llvm.amdgcn.ds.consume.p2(ptr addrspace(2) %gep, i1 false)102  store i32 %val, ptr addrspace(1) %out103  ret void104}105 106; GCN-LABEL: {{^}}ds_consume_gds_over_max_offset:107; GCN-NOT: buffer_wbinvl1108define amdgpu_kernel void @ds_consume_gds_over_max_offset(ptr addrspace(2) %gds, ptr addrspace(1) %out) #0 {109  %gep = getelementptr inbounds i32, ptr addrspace(2) %gds, i32 16384110  %val = call i32 @llvm.amdgcn.ds.consume.p2(ptr addrspace(2) %gep, i1 false)111  store i32 %val, ptr addrspace(1) %out112  ret void113}114 115; GCN-LABEL: {{^}}ds_consume_lds_m0_restore:116; GCN: s_load_dword [[PTR:s[0-9]+]]117; GCN: s_mov_b32 m0, [[PTR]]118; GCN: ds_consume [[RESULT:v[0-9]+]]{{$}}119; GCN-NOT: buffer_wbinvl1120; NOTGFX9: s_mov_b32 m0, -1121; GFX9-NOT: m0122; GCN: _store_dword123; GCN: ds_read_b32124define amdgpu_kernel void @ds_consume_lds_m0_restore(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {125  %val0 = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %lds, i1 false)126  store i32 %val0, ptr addrspace(1) %out127  %val1 = load volatile i32, ptr addrspace(3) %lds128  ret void129}130 131; Make sure this selects successfully with no use. The result register needs to be constrained.132; GCN-LABEL: {{^}}ds_consume_lds_no_use:133; GCN: s_load_dword [[PTR:s[0-9]+]]134; GCN: s_mov_b32 m0, [[PTR]]135; GCN: ds_consume [[RESULT:v[0-9]+]] offset:65532{{$}}136define amdgpu_kernel void @ds_consume_lds_no_use(ptr addrspace(3) %lds, ptr addrspace(1) %out) #0 {137  %gep = getelementptr inbounds i32, ptr addrspace(3) %lds, i32 16383138  %val = call i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) %gep, i1 false)139  ret void140}141 142declare i32 @llvm.amdgcn.ds.consume.p3(ptr addrspace(3) nocapture, i1 immarg) #1143declare i32 @llvm.amdgcn.ds.consume.p2(ptr addrspace(2) nocapture, i1 immarg) #1144 145attributes #0 = { nounwind }146attributes #1 = { argmemonly convergent nounwind }147