diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2013-08-26 15:05:59 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-08-26 15:05:59 +0000 |
commit | a01cdea9c660dc8b295782a4ab560d0039ff7571 (patch) | |
tree | 0d263ca4f8b87bb00a0465361f673e10a0c22ac9 /test/CodeGen/R600 | |
parent | c52565157d23c7b8a374b74044a5458ea67d6cb5 (diff) | |
download | llvm-a01cdea9c660dc8b295782a4ab560d0039ff7571.tar.gz llvm-a01cdea9c660dc8b295782a4ab560d0039ff7571.tar.bz2 llvm-a01cdea9c660dc8b295782a4ab560d0039ff7571.tar.xz |
R600: Add support for i8 and i16 local memory loads
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189225 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/R600')
-rw-r--r-- | test/CodeGen/R600/load.ll | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/test/CodeGen/R600/load.ll b/test/CodeGen/R600/load.ll index abb10617dd..ba8250650f 100644 --- a/test/CodeGen/R600/load.ll +++ b/test/CodeGen/R600/load.ll @@ -438,3 +438,81 @@ define void @load_const_addrspace_f32(float addrspace(1)* %out, float addrspace( ret void } +;===------------------------------------------------------------------------===; +; LOCAL ADDRESS SPACE +;===------------------------------------------------------------------------===; + +; Load an i8 value from the local address space. +; R600-CHECK: @load_i8_local +; R600-CHECK: LDS_UBYTE_READ_RET +; SI-CHECK: @load_i8_local +; SI-CHECK: DS_READ_U8 +define void @load_i8_local(i32 addrspace(1)* %out, i8 addrspace(3)* %in) { + %1 = load i8 addrspace(3)* %in + %2 = zext i8 %1 to i32 + store i32 %2, i32 addrspace(1)* %out + ret void +} + +; R600-CHECK: @load_i8_sext_local +; R600-CHECK: LDS_UBYTE_READ_RET +; R600-CHECK: ASHR +; SI-CHECK: @load_i8_sext_local +; SI-CHECK: DS_READ_I8 +define void @load_i8_sext_local(i32 addrspace(1)* %out, i8 addrspace(3)* %in) { +entry: + %0 = load i8 addrspace(3)* %in + %1 = sext i8 %0 to i32 + store i32 %1, i32 addrspace(1)* %out + ret void +} + +; Load an i16 value from the local address space. +; R600-CHECK: @load_i16_local +; R600-CHECK: LDS_USHORT_READ_RET +; SI-CHECK: @load_i16_local +; SI-CHECK: DS_READ_U16 +define void @load_i16_local(i32 addrspace(1)* %out, i16 addrspace(3)* %in) { +entry: + %0 = load i16 addrspace(3)* %in + %1 = zext i16 %0 to i32 + store i32 %1, i32 addrspace(1)* %out + ret void +} + +; R600-CHECK: @load_i16_sext_local +; R600-CHECK: LDS_USHORT_READ_RET +; R600-CHECK: ASHR +; SI-CHECK: @load_i16_sext_local +; SI-CHECK: DS_READ_I16 +define void @load_i16_sext_local(i32 addrspace(1)* %out, i16 addrspace(3)* %in) { +entry: + %0 = load i16 addrspace(3)* %in + %1 = sext i16 %0 to i32 + store i32 %1, i32 addrspace(1)* %out + ret void +} + +; load an i32 value from the glocal address space. +; R600-CHECK: @load_i32_local +; R600-CHECK: LDS_READ_RET +; SI-CHECK: @load_i32_local +; SI-CHECK: DS_READ_B32 +define void @load_i32_local(i32 addrspace(1)* %out, i32 addrspace(3)* %in) { +entry: + %0 = load i32 addrspace(3)* %in + store i32 %0, i32 addrspace(1)* %out + ret void +} + +; load a f32 value from the global address space. +; R600-CHECK: @load_f32_local +; R600-CHECK: LDS_READ_RET +; SI-CHECK: @load_f32_local +; SI-CHECK: DS_READ_B32 +define void @load_f32_local(float addrspace(1)* %out, float addrspace(3)* %in) { +entry: + %0 = load float addrspace(3)* %in + store float %0, float addrspace(1)* %out + ret void +} |