nv50/ir: only use FILE_LOCAL_MEMORY for temp arrays that use indirection
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 12 Jan 2016 19:41:52 +0000 (14:41 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Fri, 15 Jan 2016 01:13:59 +0000 (20:13 -0500)
commite231f59b6d5b12035a8041305c3a732d39a39c19
treef740144006e8ebe967790d0cea4a7c6516772c85
parent37b67db6ae34fb6586d640a7a1b6232f091dd812
nv50/ir: only use FILE_LOCAL_MEMORY for temp arrays that use indirection

Previously we were treating any indirect temp array usage to mean that
everything should end up in lmem. The MemoryOpt pass would clean a lot
of that up later, but in the meanwhile we would lose a lot of
opportunity for optimization.

This helps a lot of Metro 2033 Redux and a handful of KSP shaders:

total instructions in shared programs : 6288373 -> 6261517 (-0.43%)
total gprs used in shared programs    : 944051 -> 945131 (0.11%)
total local used in shared programs   : 54116 -> 54116 (0.00%)

A typical case is for register usage to double and for instructions to
halve. A future commit can also optimize local memory usage size to be
reduced with better packing.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp