diff options
Diffstat (limited to 'test/CodeGen/R600/extload.ll')
-rw-r--r-- | test/CodeGen/R600/extload.ll | 91 |
1 files changed, 80 insertions, 11 deletions
diff --git a/test/CodeGen/R600/extload.ll b/test/CodeGen/R600/extload.ll index aa660b3..2e70d47 100644 --- a/test/CodeGen/R600/extload.ll +++ b/test/CodeGen/R600/extload.ll @@ -1,8 +1,9 @@ -; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG %s +; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s +; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s -; EG-LABEL: @anyext_load_i8: +; FUNC-LABEL: @anyext_load_i8: ; EG: AND_INT -; EG-NEXT: 255 +; EG: 255 define void @anyext_load_i8(i8 addrspace(1)* nocapture noalias %out, i8 addrspace(1)* nocapture noalias %src) nounwind { %cast = bitcast i8 addrspace(1)* %src to i32 addrspace(1)* %load = load i32 addrspace(1)* %cast, align 1 @@ -12,10 +13,11 @@ define void @anyext_load_i8(i8 addrspace(1)* nocapture noalias %out, i8 addrspac ret void } -; EG-LABEL: @anyext_load_i16: +; FUNC-LABEL: @anyext_load_i16: ; EG: AND_INT -; EG: LSHL -; EG: 65535 +; EG: AND_INT +; EG-DAG: 65535 +; EG-DAG: -65536 define void @anyext_load_i16(i16 addrspace(1)* nocapture noalias %out, i16 addrspace(1)* nocapture noalias %src) nounwind { %cast = bitcast i16 addrspace(1)* %src to i32 addrspace(1)* %load = load i32 addrspace(1)* %cast, align 1 @@ -25,9 +27,9 @@ define void @anyext_load_i16(i16 addrspace(1)* nocapture noalias %out, i16 addrs ret void } -; EG-LABEL: @anyext_load_lds_i8: +; FUNC-LABEL: @anyext_load_lds_i8: ; EG: AND_INT -; EG-NEXT: 255 +; EG: 255 define void @anyext_load_lds_i8(i8 addrspace(3)* nocapture noalias %out, i8 addrspace(3)* nocapture noalias %src) nounwind { %cast = bitcast i8 addrspace(3)* %src to i32 addrspace(3)* %load = load i32 addrspace(3)* %cast, align 1 @@ -37,10 +39,11 @@ define void @anyext_load_lds_i8(i8 addrspace(3)* nocapture noalias %out, i8 addr ret void } -; EG-LABEL: @anyext_load_lds_i16: +; FUNC-LABEL: @anyext_load_lds_i16: +; EG: AND_INT ; EG: AND_INT -; EG: LSHL -; EG: 65535 +; EG-DAG: 65535 +; EG-DAG: -65536 define void @anyext_load_lds_i16(i16 addrspace(3)* nocapture noalias %out, i16 addrspace(3)* nocapture noalias %src) nounwind { %cast = bitcast i16 addrspace(3)* %src to i32 addrspace(3)* %load = load i32 addrspace(3)* %cast, align 1 @@ -49,3 +52,69 @@ define void @anyext_load_lds_i16(i16 addrspace(3)* nocapture noalias %out, i16 a store <2 x i16> %x, <2 x i16> addrspace(3)* %castOut, align 1 ret void } + +; FUNC-LABEL: @sextload_global_i8_to_i64 +; SI: BUFFER_LOAD_SBYTE [[LOAD:v[0-9]+]], +; SI: V_ASHRREV_I32_e32 v{{[0-9]+}}, 31, [[LOAD]] +; SI: BUFFER_STORE_DWORDX2 +define void @sextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind { + %a = load i8 addrspace(1)* %in, align 8 + %ext = sext i8 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} + +; FUNC-LABEL: @sextload_global_i16_to_i64 +; SI: BUFFER_LOAD_SSHORT [[LOAD:v[0-9]+]], +; SI: V_ASHRREV_I32_e32 v{{[0-9]+}}, 31, [[LOAD]] +; SI: BUFFER_STORE_DWORDX2 +define void @sextload_global_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(1)* %in) nounwind { + %a = load i16 addrspace(1)* %in, align 8 + %ext = sext i16 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} + +; FUNC-LABEL: @sextload_global_i32_to_i64 +; SI: BUFFER_LOAD_DWORD [[LOAD:v[0-9]+]], +; SI: V_ASHRREV_I32_e32 v{{[0-9]+}}, 31, [[LOAD]] +; SI: BUFFER_STORE_DWORDX2 +define void @sextload_global_i32_to_i64(i64 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { + %a = load i32 addrspace(1)* %in, align 8 + %ext = sext i32 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} + +; FUNC-LABEL: @zextload_global_i8_to_i64 +; SI: BUFFER_LOAD_UBYTE [[LOAD:v[0-9]+]], +; SI: V_MOV_B32_e32 {{v[0-9]+}}, 0 +; SI: BUFFER_STORE_DWORDX2 +define void @zextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind { + %a = load i8 addrspace(1)* %in, align 8 + %ext = zext i8 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} + +; FUNC-LABEL: @zextload_global_i16_to_i64 +; SI: BUFFER_LOAD_USHORT [[LOAD:v[0-9]+]], +; SI: V_MOV_B32_e32 {{v[0-9]+}}, 0 +; SI: BUFFER_STORE_DWORDX2 +define void @zextload_global_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(1)* %in) nounwind { + %a = load i16 addrspace(1)* %in, align 8 + %ext = zext i16 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} + +; FUNC-LABEL: @zextload_global_i32_to_i64 +; SI: BUFFER_LOAD_DWORD [[LOAD:v[0-9]+]], +; SI: V_MOV_B32_e32 {{v[0-9]+}}, 0 +; SI: BUFFER_STORE_DWORDX2 +define void @zextload_global_i32_to_i64(i64 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { + %a = load i32 addrspace(1)* %in, align 8 + %ext = zext i32 %a to i64 + store i64 %ext, i64 addrspace(1)* %out, align 8 + ret void +} |