OSDN Git Service

AMDGPU/SI: Limit load clustering to 16 bytes instead of 4 instructions
authorTom Stellard <thomas.stellard@amd.com>
Mon, 28 Mar 2016 16:10:13 +0000 (16:10 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 28 Mar 2016 16:10:13 +0000 (16:10 +0000)
commit4a79dec8e2bafbe8e11459f4e694f70642a057a2
tree6fe989e5439cad2046e564d0094245be2257b86b
parentadf9f00eed2e4246b3bfe8affcb85647e0449865
AMDGPU/SI: Limit load clustering to 16 bytes instead of 4 instructions

Summary:
This helps prevent load clustering from drastically increasing register
pressure by trying to cluster 4 SMRDx8 loads together.  The limit of 16
bytes was chosen, because it seems like that was the original intent
of setting the limit to 4 instructions, but more analysis could show
that a different limit is better.

This fixes yields small decreases in register usage with shader-db, but
also helps avoid a large increase in register usage when lane mask
tracking is enabled in the machine scheduler, because lane mask tracking
enables more opportunities for load clustering.

shader-db stats:

2379 shaders in 477 tests
Totals:
SGPRS: 49744 -> 48600 (-2.30 %)
VGPRS: 34120 -> 34076 (-0.13 %)
Code Size: 1282888 -> 1283184 (0.02 %) bytes
LDS: 28 -> 28 (0.00 %) blocks
Scratch: 495616 -> 492544 (-0.62 %) bytes per wave
Max Waves: 6843 -> 6853 (0.15 %)
Wait states: 0 -> 0 (0.00 %)

Reviewers: nhaehnle, arsenm

Subscribers: arsenm, llvm-commits

Differential Revision: http://reviews.llvm.org/D18451

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264589 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AMDGPU/SIInstrInfo.cpp
test/CodeGen/AMDGPU/ctpop.ll
test/CodeGen/AMDGPU/madak.ll
test/CodeGen/AMDGPU/schedule-kernel-arg-loads.ll