summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/api_loopback.h
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2016-01-17 22:28:19 -0500
committerIlia Mirkin <[email protected]>2016-01-18 17:52:07 -0500
commita31819cff8f4560786d731f5f1de6ba814368a2f (patch)
tree0fc7baadc78048c714a2a35f7e74b2b8b68eadbe /src/mesa/main/api_loopback.h
parentaf686e7de3cc7cc053959729e9e31432740489fa (diff)
nv50/ir: swap the least-ref'd source into src1 when both const/imm
The whole point of inlining sources is to reduce loads. We can end up in a situation where one value is used a lot of times, and one value is used only once per instruction. The once-per-instruction one is the one that should get inlined, but with the previous algorithm, it was given no preference. This flips things around to preferring putting less-referenced values into src1 which increases the likelihood of them being inlined. While we're at it, adjust the heuristic to not treat 0 as an immediate, as well as (effectively) check for situations where LIMMs can't be loaded. All this yields improvements on nvc0: total instructions in shared programs : 6261157 -> 6255985 (-0.08%) total gprs used in shared programs : 945082 -> 943417 (-0.18%) total local used in shared programs : 30372 -> 30288 (-0.28%) total bytes used in shared programs : 50089256 -> 50047880 (-0.08%) local gpr inst bytes helped 21 822 3332 3332 hurt 0 278 565 565 And more importantly avoids generating really bad code with SSBOs, where we end up checking a lot of different values (usually immediates) against the length. On nv50 we get comparable results, and even improve packing (bytes went down more than instructions): total instructions in shared programs : 6346564 -> 6341277 (-0.08%) total gprs used in shared programs : 728719 -> 725131 (-0.49%) total local used in shared programs : 3552 -> 3552 (0.00%) total bytes used in shared programs : 43995688 -> 43932928 (-0.14%) local gpr inst bytes helped 0 1380 3252 3774 hurt 0 287 1710 1365 Signed-off-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/mesa/main/api_loopback.h')
0 files changed, 0 insertions, 0 deletions