glsl: Add a CSE pass.
authorEric Anholt <eric@anholt.net>
Thu, 17 Oct 2013 17:28:40 +0000 (10:28 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 1 Nov 2013 17:25:33 +0000 (10:25 -0700)
commitfd05ede0d05ee896cf07e2f690ddb42567f9f606
treec6af3f15dfb1c1172c9d26d645cb88ef7b488b21
parent3641b97bdce558d980799b00422c6aee7d472cf5
glsl: Add a CSE pass.

This only operates on constant/uniform values for now, because otherwise I'd
have to deal with killing my available CSE entries when assignments happen,
and getting even this working in the tree ir was painful enough.

As is, it has the following effect in shader-db:

total instructions in shared programs: 1524077 -> 1521964 (-0.14%)
instructions in affected programs:     50629 -> 48516 (-4.17%)
GAINED:                                0
LOST:                                  0

And, for tropics, that accounts for most of the effect, the FPS
improvement is 11.67% +/- 0.72% (n=3).

v2: Use read_only field of the variable, manually check the lod_info union
    members, use get_num_operands(), rename cse_operands_visitor to
    is_cse_candidate_visitor, move all is-a-candidate logic to that
    function, and call it before checking for CSE on a given rvalue, more
    comments, use private keyword.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/glsl/Makefile.sources
src/glsl/glsl_parser_extras.cpp
src/glsl/ir.h
src/glsl/ir_optimization.h
src/glsl/opt_cse.cpp [new file with mode: 0644]