282 lines · plain
1; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefixes=GCN,SICIVI,FUNC %s2; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global,-enable-ds128 < %s | FileCheck -check-prefixes=GCN,SICIVI,FUNC %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-flat-for-global,-enable-ds128 < %s | FileCheck -check-prefixes=GCN,FUNC %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx908 -mattr=-flat-for-global,-enable-ds128 < %s | FileCheck -check-prefixes=GCN,FUNC %s5; RUN: llc -mtriple=r600 -mcpu=redwood < %s | FileCheck --check-prefixes=EG,FUNC %s6 7; Testing for ds_read/write_1288; RUN: llc -mtriple=amdgcn -mcpu=tahiti -mattr=+enable-ds128 < %s | FileCheck -check-prefixes=SI,FUNC %s9; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=+enable-ds128 < %s | FileCheck -check-prefixes=CIVI,FUNC %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=+enable-ds128 < %s | FileCheck -check-prefixes=CIVI,FUNC %s11 12; FUNC-LABEL: {{^}}local_load_i32:13; GCN-NOT: s_wqm_b6414; SICIVI: s_mov_b32 m0, -115; GFX9-NOT: m016; GCN: ds_read_b3217 18; EG: LDS_READ_RET19define amdgpu_kernel void @local_load_i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {20entry:21 %ld = load i32, ptr addrspace(3) %in22 store i32 %ld, ptr addrspace(3) %out23 ret void24}25 26; FUNC-LABEL: {{^}}local_load_v2i32:27; SICIVI: s_mov_b32 m0, -128; GFX9-NOT: m029 30; GCN: ds_read_b6431define amdgpu_kernel void @local_load_v2i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {32entry:33 %ld = load <2 x i32>, ptr addrspace(3) %in34 store <2 x i32> %ld, ptr addrspace(3) %out35 ret void36}37 38; FUNC-LABEL: {{^}}local_load_v3i32:39; SICIVI: s_mov_b32 m0, -140; GFX9-NOT: m041 42; SI-DAG: ds_read_b6443; SI-DAG: ds_read_b3244; CIVI-DAG: ds_read_b9645define amdgpu_kernel void @local_load_v3i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {46entry:47 %ld = load <3 x i32>, ptr addrspace(3) %in48 store <3 x i32> %ld, ptr addrspace(3) %out49 ret void50}51 52; FUNC-LABEL: {{^}}local_load_v4i32:53; SICIVI: s_mov_b32 m0, -154; GFX9-NOT: m055 56; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}57 58define amdgpu_kernel void @local_load_v4i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {59entry:60 %ld = load <4 x i32>, ptr addrspace(3) %in61 store <4 x i32> %ld, ptr addrspace(3) %out62 ret void63}64 65; FUNC-LABEL: {{^}}local_load_v8i32:66; SICIVI: s_mov_b32 m0, -167; GFX9-NOT: m068 69; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}70; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}71define amdgpu_kernel void @local_load_v8i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {72entry:73 %ld = load <8 x i32>, ptr addrspace(3) %in74 store <8 x i32> %ld, ptr addrspace(3) %out75 ret void76}77 78; FUNC-LABEL: {{^}}local_load_v16i32:79; SICIVI: s_mov_b32 m0, -180; GFX9-NOT: m081 82; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7{{$}}83; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5{{$}}84; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}85; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}86; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:787; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:588; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:389; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:190define amdgpu_kernel void @local_load_v16i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {91entry:92 %ld = load <16 x i32>, ptr addrspace(3) %in93 store <16 x i32> %ld, ptr addrspace(3) %out94 ret void95}96 97; FUNC-LABEL: {{^}}local_zextload_i32_to_i64:98; SICIVI: s_mov_b32 m0, -199; GFX9-NOT: m0100 101define amdgpu_kernel void @local_zextload_i32_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {102 %ld = load i32, ptr addrspace(3) %in103 %ext = zext i32 %ld to i64104 store i64 %ext, ptr addrspace(3) %out105 ret void106}107 108; FUNC-LABEL: {{^}}local_sextload_i32_to_i64:109; SICIVI: s_mov_b32 m0, -1110; GFX9-NOT: m0111 112define amdgpu_kernel void @local_sextload_i32_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {113 %ld = load i32, ptr addrspace(3) %in114 %ext = sext i32 %ld to i64115 store i64 %ext, ptr addrspace(3) %out116 ret void117}118 119; FUNC-LABEL: {{^}}local_zextload_v1i32_to_v1i64:120; SICIVI: s_mov_b32 m0, -1121; GFX9-NOT: m0122 123define amdgpu_kernel void @local_zextload_v1i32_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {124 %ld = load <1 x i32>, ptr addrspace(3) %in125 %ext = zext <1 x i32> %ld to <1 x i64>126 store <1 x i64> %ext, ptr addrspace(3) %out127 ret void128}129 130; FUNC-LABEL: {{^}}local_sextload_v1i32_to_v1i64:131; SICIVI: s_mov_b32 m0, -1132; GFX9-NOT: m0133 134define amdgpu_kernel void @local_sextload_v1i32_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {135 %ld = load <1 x i32>, ptr addrspace(3) %in136 %ext = sext <1 x i32> %ld to <1 x i64>137 store <1 x i64> %ext, ptr addrspace(3) %out138 ret void139}140 141; FUNC-LABEL: {{^}}local_zextload_v2i32_to_v2i64:142; SICIVI: s_mov_b32 m0, -1143; GFX9-NOT: m0144 145define amdgpu_kernel void @local_zextload_v2i32_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {146 %ld = load <2 x i32>, ptr addrspace(3) %in147 %ext = zext <2 x i32> %ld to <2 x i64>148 store <2 x i64> %ext, ptr addrspace(3) %out149 ret void150}151 152; FUNC-LABEL: {{^}}local_sextload_v2i32_to_v2i64:153; SICIVI: s_mov_b32 m0, -1154; GFX9-NOT: m0155 156define amdgpu_kernel void @local_sextload_v2i32_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {157 %ld = load <2 x i32>, ptr addrspace(3) %in158 %ext = sext <2 x i32> %ld to <2 x i64>159 store <2 x i64> %ext, ptr addrspace(3) %out160 ret void161}162 163; FUNC-LABEL: {{^}}local_zextload_v4i32_to_v4i64:164; SICIVI: s_mov_b32 m0, -1165; GFX9-NOT: m0166 167define amdgpu_kernel void @local_zextload_v4i32_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {168 %ld = load <4 x i32>, ptr addrspace(3) %in169 %ext = zext <4 x i32> %ld to <4 x i64>170 store <4 x i64> %ext, ptr addrspace(3) %out171 ret void172}173 174; FUNC-LABEL: {{^}}local_sextload_v4i32_to_v4i64:175; SICIVI: s_mov_b32 m0, -1176; GFX9-NOT: m0177 178define amdgpu_kernel void @local_sextload_v4i32_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {179 %ld = load <4 x i32>, ptr addrspace(3) %in180 %ext = sext <4 x i32> %ld to <4 x i64>181 store <4 x i64> %ext, ptr addrspace(3) %out182 ret void183}184 185; Tests if ds_read/write_b128 gets generated for the 16 byte aligned load.186; FUNC-LABEL: {{^}}local_v4i32_to_128:187 188; SI-NOT: ds_read_b128189; SI-NOT: ds_write_b128190 191; CIVI: ds_read_b128192; CIVI: ds_write_b128193 194; EG: LDS_READ_RET195; EG: LDS_READ_RET196; EG: LDS_READ_RET197; EG: LDS_READ_RET198define amdgpu_kernel void @local_v4i32_to_128(ptr addrspace(3) %out, ptr addrspace(3) %in) {199 %ld = load <4 x i32>, ptr addrspace(3) %in, align 16200 store <4 x i32> %ld, ptr addrspace(3) %out, align 16201 ret void202}203 204; FUNC-LABEL: {{^}}local_zextload_v8i32_to_v8i64:205; SICIVI: s_mov_b32 m0, -1206; GFX9-NOT: m0207 208define amdgpu_kernel void @local_zextload_v8i32_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {209 %ld = load <8 x i32>, ptr addrspace(3) %in210 %ext = zext <8 x i32> %ld to <8 x i64>211 store <8 x i64> %ext, ptr addrspace(3) %out212 ret void213}214 215; FUNC-LABEL: {{^}}local_sextload_v8i32_to_v8i64:216; SICIVI: s_mov_b32 m0, -1217; GFX9-NOT: m0218 219define amdgpu_kernel void @local_sextload_v8i32_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {220 %ld = load <8 x i32>, ptr addrspace(3) %in221 %ext = sext <8 x i32> %ld to <8 x i64>222 store <8 x i64> %ext, ptr addrspace(3) %out223 ret void224}225 226; FUNC-LABEL: {{^}}local_sextload_v16i32_to_v16i64:227; SICIVI: s_mov_b32 m0, -1228; GFX9-NOT: m0229 230define amdgpu_kernel void @local_sextload_v16i32_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {231 %ld = load <16 x i32>, ptr addrspace(3) %in232 %ext = sext <16 x i32> %ld to <16 x i64>233 store <16 x i64> %ext, ptr addrspace(3) %out234 ret void235}236 237; FUNC-LABEL: {{^}}local_zextload_v16i32_to_v16i64238; SICIVI: s_mov_b32 m0, -1239; GFX9-NOT: m0240 241define amdgpu_kernel void @local_zextload_v16i32_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {242 %ld = load <16 x i32>, ptr addrspace(3) %in243 %ext = zext <16 x i32> %ld to <16 x i64>244 store <16 x i64> %ext, ptr addrspace(3) %out245 ret void246}247 248; FUNC-LABEL: {{^}}local_sextload_v32i32_to_v32i64:249; SICIVI: s_mov_b32 m0, -1250; GFX9-NOT: m0251 252define amdgpu_kernel void @local_sextload_v32i32_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {253 %ld = load <32 x i32>, ptr addrspace(3) %in254 %ext = sext <32 x i32> %ld to <32 x i64>255 store <32 x i64> %ext, ptr addrspace(3) %out256 ret void257}258 259; FUNC-LABEL: {{^}}local_zextload_v32i32_to_v32i64:260; SICIVI: s_mov_b32 m0, -1261; GFX9-NOT: m0262 263define amdgpu_kernel void @local_zextload_v32i32_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {264 %ld = load <32 x i32>, ptr addrspace(3) %in265 %ext = zext <32 x i32> %ld to <32 x i64>266 store <32 x i64> %ext, ptr addrspace(3) %out267 ret void268}269 270; FUNC-LABEL: {{^}}local_load_v32i32:271; SICIVI: s_mov_b32 m0, -1272; GFX9-NOT: m0273; GFX9-NOT: accvgpr274 275define amdgpu_kernel void @local_load_v32i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {276 %ld = load <32 x i32>, ptr addrspace(3) %in277 store <32 x i32> %ld, ptr addrspace(3) %out278 ret void279}280 281attributes #0 = { nounwind }282