diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2014-05-02 15:41:46 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2014-05-02 15:41:46 +0000 |
commit | 1d6859256c388bcbe00f1eb04a10d54a655d1f2f (patch) | |
tree | cc0828ef925ac37462f24f42b3f384eecf67793f /test | |
parent | 9b226260681e9ee96b431b1cb75924e14d59fb0a (diff) | |
download | llvm-1d6859256c388bcbe00f1eb04a10d54a655d1f2f.tar.gz llvm-1d6859256c388bcbe00f1eb04a10d54a655d1f2f.tar.bz2 llvm-1d6859256c388bcbe00f1eb04a10d54a655d1f2f.tar.xz |
R600: Expand TruncStore i64 -> {i16,i8}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207844 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/R600/store.ll | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/CodeGen/R600/store.ll b/test/CodeGen/R600/store.ll index b29ad7e3ab..c0c8ccc15a 100644 --- a/test/CodeGen/R600/store.ll +++ b/test/CodeGen/R600/store.ll @@ -177,6 +177,26 @@ entry: ret void } +; FUNC-LABEL: @store_i64_i8 +; EG-CHECK: MEM_RAT MSKOR +; SI-CHECK: BUFFER_STORE_BYTE +define void @store_i64_i8(i8 addrspace(1)* %out, i64 %in) { +entry: + %0 = trunc i64 %in to i8 + store i8 %0, i8 addrspace(1)* %out + ret void +} + +; FUNC-LABEL: @store_i64_i16 +; EG-CHECK: MEM_RAT MSKOR +; SI-CHECK: BUFFER_STORE_SHORT +define void @store_i64_i16(i16 addrspace(1)* %out, i64 %in) { +entry: + %0 = trunc i64 %in to i16 + store i16 %0, i16 addrspace(1)* %out + ret void +} + ;===------------------------------------------------------------------------===; ; Local Address Space ;===------------------------------------------------------------------------===; @@ -272,6 +292,26 @@ entry: ret void } +; FUNC-LABEL: @store_local_i64_i8 +; EG-CHECK: LDS_BYTE_WRITE +; SI-CHECK: DS_WRITE_B8 +define void @store_local_i64_i8(i8 addrspace(3)* %out, i64 %in) { +entry: + %0 = trunc i64 %in to i8 + store i8 %0, i8 addrspace(3)* %out + ret void +} + +; FUNC-LABEL: @store_local_i64_i16 +; EG-CHECK: LDS_SHORT_WRITE +; SI-CHECK: DS_WRITE_B16 +define void @store_local_i64_i16(i16 addrspace(3)* %out, i64 %in) { +entry: + %0 = trunc i64 %in to i16 + store i16 %0, i16 addrspace(3)* %out + ret void +} + ; The stores in this function are combined by the optimizer to create a ; 64-bit store with 32-bit alignment. This is legal for SI and the legalizer ; should not try to split the 64-bit store back into 2 32-bit stores. |