diff options
| author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2018-10-31 21:24:30 +0000 |
|---|---|---|
| committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2018-10-31 21:24:30 +0000 |
| commit | 222e9c11f7c9bfba5a5a442d2f54d74fda96f78a (patch) | |
| tree | e3b5efba9f3ced2ae67f8fc9a104a64cde34fa39 /llvm/test | |
| parent | 03da6e6a623019916f3fd03b31cb19e6969db21f (diff) | |
| download | bcm5719-llvm-222e9c11f7c9bfba5a5a442d2f54d74fda96f78a.tar.gz bcm5719-llvm-222e9c11f7c9bfba5a5a442d2f54d74fda96f78a.zip | |
Check shouldReduceLoadWidth from SimplifySetCC
SimplifySetCC could shrink a load without checking for
profitability or legality of such shink with a target.
Added checks to prevent shrinking of aligned scalar loads
in AMDGPU below dword as scalar engine does not support it.
Differential Revision: https://reviews.llvm.org/D53846
llvm-svn: 345778
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/setcc-limit-load-shrink.ll | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/setcc-limit-load-shrink.ll b/llvm/test/CodeGen/AMDGPU/setcc-limit-load-shrink.ll new file mode 100644 index 00000000000..ae50d4f18c4 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/setcc-limit-load-shrink.ll @@ -0,0 +1,65 @@ +; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s + +; GCN-LABEL: {{^}}const_load_no_shrink_dword_to_unaligned_byte: +; GCN: s_load_dword [[LD:s[0-9]+]], +; GCN: s_bfe_i32 s{{[0-9]+}}, [[LD]], 0x10013 +define amdgpu_kernel void @const_load_no_shrink_dword_to_unaligned_byte(i32 addrspace(1)* %out, i32 addrspace(4)* %in, i32 %x) { + %ptr = getelementptr i32, i32 addrspace(4)* %in, i32 %x + %load = load i32, i32 addrspace(4)* %ptr, align 4 + %and = and i32 %load, 524288 + %cmp = icmp eq i32 %and, 0 + %sel = select i1 %cmp, i32 0, i32 -1 + store i32 %sel, i32 addrspace(1)* %out + ret void +} + +; GCN-LABEL: const_load_no_shrink_dword_to_aligned_byte: +; GCN: s_load_dword [[LD:s[0-9]+]], +; GCN: s_bfe_i32 s{{[0-9]+}}, [[LD]], 0x10003 +define amdgpu_kernel void @const_load_no_shrink_dword_to_aligned_byte(i32 addrspace(1)* %out, i32 addrspace(4)* %in, i32 %x) { + %ptr = getelementptr i32, i32 addrspace(4)* %in, i32 %x + %load = load i32, i32 addrspace(4)* %ptr, align 4 + %and = and i32 %load, 8 + %cmp = icmp eq i32 %and, 0 + %sel = select i1 %cmp, i32 0, i32 -1 + store i32 %sel, i32 addrspace(1)* %out + ret void +} + +; GCN-LABEL: global_load_no_shrink_dword_to_unaligned_byte: +; GCN: s_load_dword [[LD:s[0-9]+]], +; GCN: s_bfe_i32 s{{[0-9]+}}, [[LD]], 0x10013 +define amdgpu_kernel void @global_load_no_shrink_dword_to_unaligned_byte(i32 addrspace(1)* noalias %out, i32 addrspace(1)* noalias %in, i32 %x) { + %ptr = getelementptr i32, i32 addrspace(1)* %in, i32 %x + %load = load i32, i32 addrspace(1)* %ptr, align 4 + %and = and i32 %load, 524288 + %cmp = icmp eq i32 %and, 0 + %sel = select i1 %cmp, i32 0, i32 -1 + store i32 %sel, i32 addrspace(1)* %out + ret void +} + +; GCN-LABEL: global_load_no_shrink_dword_to_aligned_byte: +; GCN: s_load_dword [[LD:s[0-9]+]], +; GCN: s_bfe_i32 s{{[0-9]+}}, [[LD]], 0x10003 +define amdgpu_kernel void @global_load_no_shrink_dword_to_aligned_byte(i32 addrspace(1)* %out, i32 addrspace(1)* %in, i32 %x) { + %ptr = getelementptr i32, i32 addrspace(1)* %in, i32 %x + %load = load i32, i32 addrspace(1)* %ptr, align 4 + %and = and i32 %load, 8 + %cmp = icmp eq i32 %and, 0 + %sel = select i1 %cmp, i32 0, i32 -1 + store i32 %sel, i32 addrspace(1)* %out + ret void +} + +; GCN-LABEL: const_load_shrink_dword_to_unaligned_byte: +; GCN: global_load_ushort +define amdgpu_kernel void @const_load_shrink_dword_to_unaligned_byte(i32 addrspace(1)* %out, i32 addrspace(4)* %in, i32 %x) { + %ptr = getelementptr i32, i32 addrspace(4)* %in, i32 %x + %load = load i32, i32 addrspace(4)* %ptr, align 2 + %and = and i32 %load, 524288 + %cmp = icmp eq i32 %and, 0 + %sel = select i1 %cmp, i32 0, i32 -1 + store i32 %sel, i32 addrspace(1)* %out + ret void +} |

