diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
commit | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch) | |
tree | 98b8f811c7aff2547cab8642daf372d6c59502fb /test/CodeGen/AMDGPU/load-local-i8.ll | |
parent | 6421cca32f69ac849537a3cff78c352195e99f1b (diff) | |
download | src-test2-b915e9e0fc85ba6f398b3fab0db6a81a8913af94.tar.gz src-test2-b915e9e0fc85ba6f398b3fab0db6a81a8913af94.zip |
Notes
Diffstat (limited to 'test/CodeGen/AMDGPU/load-local-i8.ll')
-rw-r--r-- | test/CodeGen/AMDGPU/load-local-i8.ll | 416 |
1 files changed, 397 insertions, 19 deletions
diff --git a/test/CodeGen/AMDGPU/load-local-i8.ll b/test/CodeGen/AMDGPU/load-local-i8.ll index be865b078d74..02b59e89c3f3 100644 --- a/test/CodeGen/AMDGPU/load-local-i8.ll +++ b/test/CodeGen/AMDGPU/load-local-i8.ll @@ -1,5 +1,5 @@ -; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s -; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s +; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,SI,FUNC %s +; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,VI,FUNC %s ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s @@ -64,8 +64,8 @@ entry: } ; FUNC-LABEL: {{^}}local_load_v16i8: -; GCN: ds_read2_b64 v{{\[}}[[LO:[0-9]+]]:[[HI:[0-9]+]]{{\]}}, v{{[0-9]+}} offset0:1{{$}} -; GCN: ds_write2_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]{{\]}} offset0:1{{$}} +; GCN: ds_read2_b64 v{{\[}}[[LO:[0-9]+]]:[[HI:[0-9]+]]{{\]}}, v{{[0-9]+}} offset1:1{{$}} +; GCN: ds_write2_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]{{\]}} offset1:1{{$}} ; EG: LDS_READ_RET ; EG: LDS_READ_RET @@ -106,6 +106,8 @@ define void @local_sextload_i8_to_i32(i32 addrspace(3)* %out, i8 addrspace(3)* % } ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i32: + +; EG: LDS_UBYTE_READ_RET define void @local_zextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = zext <1 x i8> %load to <1 x i32> @@ -114,6 +116,9 @@ define void @local_zextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i32: + +; EG: LDS_UBYTE_READ_RET +; EG: BFE_INT define void @local_sextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = sext <1 x i8> %load to <1 x i32> @@ -124,8 +129,7 @@ define void @local_sextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i32: ; GCN: ds_read_u16 -; EG: LDS_UBYTE_READ_RET -; EG: LDS_UBYTE_READ_RET +; EG: LDS_USHORT_READ_RET define void @local_zextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { %load = load <2 x i8>, <2 x i8> addrspace(3)* %in %ext = zext <2 x i8> %load to <2 x i32> @@ -137,11 +141,19 @@ define void @local_zextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> ; GCN-NOT: s_wqm_b64 ; GCN: s_mov_b32 m0 ; GCN: ds_read_u16 -; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 -; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8 +; FIXME: Need to optimize this sequence to avoid extra shift on VI. +; t23: i16 = srl t39, Constant:i32<8> +; t31: i32 = any_extend t23 +; t33: i32 = sign_extend_inreg t31, ValueType:ch:i8 + +; SI-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 +; SI-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8 -; EG-DAG: LDS_UBYTE_READ_RET -; EG-DAG: LDS_UBYTE_READ_RET +; VI-DAG: v_lshrrev_b16_e32 [[SHIFT:v[0-9]+]], 8, v{{[0-9]+}} +; VI-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8 +; VI-DAG: v_bfe_i32 v{{[0-9]+}}, [[SHIFT]], 0, 8 + +; EG: LDS_USHORT_READ_RET ; EG-DAG: BFE_INT ; EG-DAG: BFE_INT define void @local_sextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { @@ -154,9 +166,12 @@ define void @local_sextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> ; FUNC-LABEL: {{^}}local_zextload_v3i8_to_v3i32: ; GCN: ds_read_b32 -; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 +; SI-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 +; VI-DAG: v_lshrrev_b16_e32 v{{[0-9]+}}, 8, {{v[0-9]+}} ; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8 ; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff, + +; EG: LDS_READ_RET define void @local_zextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 { entry: %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in @@ -178,6 +193,10 @@ entry: ; GCN-DAG: ds_write_b64 ; GCN-DAG: ds_write_b32 +; EG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT define void @local_sextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 { entry: %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in @@ -191,10 +210,10 @@ entry: ; GCN: s_mov_b32 m0 ; GCN: ds_read_b32 -; EG: LDS_UBYTE_READ_RET -; EG: LDS_UBYTE_READ_RET -; EG: LDS_UBYTE_READ_RET -; EG: LDS_UBYTE_READ_RET +; EG: LDS_READ_RET +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT define void @local_zextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { %load = load <4 x i8>, <4 x i8> addrspace(3)* %in %ext = zext <4 x i8> %load to <4 x i32> @@ -207,10 +226,7 @@ define void @local_zextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> ; GCN: s_mov_b32 m0 ; GCN: ds_read_b32 -; EG-DAG: LDS_UBYTE_READ_RET -; EG-DAG: LDS_UBYTE_READ_RET -; EG-DAG: LDS_UBYTE_READ_RET -; EG-DAG: LDS_UBYTE_READ_RET +; EG-DAG: LDS_READ_RET ; EG-DAG: BFE_INT ; EG-DAG: BFE_INT ; EG-DAG: BFE_INT @@ -223,6 +239,15 @@ define void @local_sextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT define void @local_zextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = zext <8 x i8> %load to <8 x i32> @@ -231,6 +256,17 @@ define void @local_zextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT define void @local_sextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = sext <8 x i8> %load to <8 x i32> @@ -239,6 +275,23 @@ define void @local_sextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT +; EG-DAG: BFE_UINT define void @local_zextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = zext <16 x i8> %load to <16 x i32> @@ -247,6 +300,27 @@ define void @local_zextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT define void @local_sextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = sext <16 x i8> %load to <16 x i32> @@ -255,6 +329,15 @@ define void @local_sextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET define void @local_zextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = zext <32 x i8> %load to <32 x i32> @@ -263,6 +346,15 @@ define void @local_zextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x } ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET define void @local_sextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = sext <32 x i8> %load to <32 x i32> @@ -271,6 +363,23 @@ define void @local_sextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x } ; FUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET define void @local_zextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { %load = load <64 x i8>, <64 x i8> addrspace(3)* %in %ext = zext <64 x i8> %load to <64 x i32> @@ -279,6 +388,23 @@ define void @local_zextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x } ; FUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i32: + +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET +; EG-DAG: LDS_READ_RET define void @local_sextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { %load = load <64 x i8>, <64 x i8> addrspace(3)* %in %ext = sext <64 x i8> %load to <64 x i32> @@ -290,6 +416,10 @@ define void @local_sextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} ; GCN-DAG: ds_read_u8 v[[LO:[0-9]+]], ; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]] + +; EG: LDS_UBYTE_READ_RET +; EG: MOV {{.*}}, literal +; EG: 0.0 define void @local_zextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { %a = load i8, i8 addrspace(3)* %in %ext = zext i8 %a to i64 @@ -302,6 +432,11 @@ define void @local_zextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* % ; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] ; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]{{\]}} + +; EG: LDS_UBYTE_READ_RET +; EG: ASHR +; TODO: why not 7? +; EG: 31 define void @local_sextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { %a = load i8, i8 addrspace(3)* %in %ext = sext i8 %a to i64 @@ -310,6 +445,11 @@ define void @local_sextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* % } ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i64: + +; EG: LDS_UBYTE_READ_RET +; EG: MOV {{.*}}, literal +; TODO: merge? +; EG: 0.0 define void @local_zextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = zext <1 x i8> %load to <1 x i64> @@ -318,6 +458,11 @@ define void @local_zextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i64: + +; EG: LDS_UBYTE_READ_RET +; EG: ASHR +; TODO: why not 7? +; EG: 31 define void @local_sextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = sext <1 x i8> %load to <1 x i64> @@ -326,6 +471,8 @@ define void @local_sextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i64: + +; EG: LDS_USHORT_READ_RET define void @local_zextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { %load = load <2 x i8>, <2 x i8> addrspace(3)* %in %ext = zext <2 x i8> %load to <2 x i64> @@ -334,6 +481,10 @@ define void @local_zextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i64: + +; EG: LDS_USHORT_READ_RET +; EG: BFE_INT +; EG: BFE_INT define void @local_sextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { %load = load <2 x i8>, <2 x i8> addrspace(3)* %in %ext = sext <2 x i8> %load to <2 x i64> @@ -342,6 +493,8 @@ define void @local_sextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i64: + +; EG: LDS_READ_RET define void @local_zextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { %load = load <4 x i8>, <4 x i8> addrspace(3)* %in %ext = zext <4 x i8> %load to <4 x i64> @@ -350,6 +503,8 @@ define void @local_zextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i64: + +; EG: LDS_READ_RET define void @local_sextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { %load = load <4 x i8>, <4 x i8> addrspace(3)* %in %ext = sext <4 x i8> %load to <4 x i64> @@ -358,6 +513,9 @@ define void @local_sextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET define void @local_zextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = zext <8 x i8> %load to <8 x i64> @@ -366,6 +524,18 @@ define void @local_zextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT define void @local_sextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = sext <8 x i8> %load to <8 x i64> @@ -374,6 +544,11 @@ define void @local_sextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET define void @local_zextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = zext <16 x i8> %load to <16 x i64> @@ -382,6 +557,11 @@ define void @local_zextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET define void @local_sextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = sext <16 x i8> %load to <16 x i64> @@ -390,6 +570,15 @@ define void @local_sextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET define void @local_zextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = zext <32 x i8> %load to <32 x i64> @@ -398,6 +587,15 @@ define void @local_zextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x } ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i64: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET define void @local_sextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = sext <32 x i8> %load to <32 x i64> @@ -424,6 +622,9 @@ define void @local_sextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x ; FUNC-LABEL: {{^}}local_zextload_i8_to_i16: ; GCN: ds_read_u8 v[[VAL:[0-9]+]], ; GCN: ds_write_b16 v[[VAL:[0-9]+]] + +; EG: LDS_UBYTE_READ_RET +; EG: LDS_SHORT_WRITE define void @local_zextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { %a = load i8, i8 addrspace(3)* %in %ext = zext i8 %a to i16 @@ -434,6 +635,10 @@ define void @local_zextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* % ; FUNC-LABEL: {{^}}local_sextload_i8_to_i16: ; GCN: ds_read_i8 v[[VAL:[0-9]+]], ; GCN: ds_write_b16 v{{[0-9]+}}, v[[VAL]] + +; EG: LDS_UBYTE_READ_RET +; EG: BFE_INT +; EG: LDS_SHORT_WRITE define void @local_sextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { %a = load i8, i8 addrspace(3)* %in %ext = sext i8 %a to i16 @@ -442,6 +647,9 @@ define void @local_sextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* % } ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i16: + +; EG: LDS_UBYTE_READ_RET +; EG: LDS_SHORT_WRITE define void @local_zextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = zext <1 x i8> %load to <1 x i16> @@ -450,6 +658,10 @@ define void @local_zextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i16: + +; EG: LDS_UBYTE_READ_RET +; EG: BFE_INT +; EG: LDS_SHORT_WRITE define void @local_sextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { %load = load <1 x i8>, <1 x i8> addrspace(3)* %in %ext = sext <1 x i8> %load to <1 x i16> @@ -458,6 +670,9 @@ define void @local_sextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i16: + +; EG: LDS_USHORT_READ_RET +; EG: LDS_WRITE define void @local_zextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { %load = load <2 x i8>, <2 x i8> addrspace(3)* %in %ext = zext <2 x i8> %load to <2 x i16> @@ -466,6 +681,11 @@ define void @local_zextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i16: + +; EG: LDS_USHORT_READ_RET +; EG: BFE_INT +; EG: BFE_INT +; EG: LDS_WRITE define void @local_sextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { %load = load <2 x i8>, <2 x i8> addrspace(3)* %in %ext = sext <2 x i8> %load to <2 x i16> @@ -474,6 +694,10 @@ define void @local_sextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i16: + +; EG: LDS_READ_RET +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_zextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { %load = load <4 x i8>, <4 x i8> addrspace(3)* %in %ext = zext <4 x i8> %load to <4 x i16> @@ -482,6 +706,14 @@ define void @local_zextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i16: + +; EG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: ASHR +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_sextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { %load = load <4 x i8>, <4 x i8> addrspace(3)* %in %ext = sext <4 x i8> %load to <4 x i16> @@ -490,6 +722,13 @@ define void @local_sextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_zextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = zext <8 x i8> %load to <8 x i16> @@ -498,6 +737,21 @@ define void @local_zextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_sextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { %load = load <8 x i8>, <8 x i8> addrspace(3)* %in %ext = sext <8 x i8> %load to <8 x i16> @@ -506,6 +760,19 @@ define void @local_sextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> } ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_zextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = zext <16 x i8> %load to <16 x i16> @@ -514,6 +781,35 @@ define void @local_zextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_sextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { %load = load <16 x i8>, <16 x i8> addrspace(3)* %in %ext = sext <16 x i8> %load to <16 x i16> @@ -522,6 +818,31 @@ define void @local_sextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x } ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_zextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = zext <32 x i8> %load to <32 x i16> @@ -530,6 +851,63 @@ define void @local_zextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x } ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i16: + +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG: LDS_READ_RET +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: BFE_INT +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG-DAG: ASHR +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE +; EG: LDS_WRITE define void @local_sextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { %load = load <32 x i8>, <32 x i8> addrspace(3)* %in %ext = sext <32 x i8> %load to <32 x i16> |