Continuing the tale of fixing https://bugs.freedesktop.org/show_bug.cgi?id=76861
Instead of making an IR expression type for mid3, I implemented an optimization pass that optimizes general min/max expression trees, by dropping operands that are proven to never be selected as the final result. This optimization pass not only improves code generated from mid3(), but also other sources of such min/max trees, such as clamp(), or plain min() and max(). Commit message for patch 1/9 contains shader-db instruction count results, repeated here: total instructions in shared programs: 4293603 -> 4293575 (-0.00%) instructions in affected programs: 1188 -> 1160 (-2.36%) GAINED: 0 LOST: 0 Serious Sam 3 and Guacamelee were improved, Dungeon Defenders was made a bit worse. There was a max(foo, 0.0) in the shader where the 0.0 constant was dropped, which then resulted in shorter IR code but longer shader binary. No changes in piglit results. Patch 9 adds unit tests for the pass. Petri Latvala (9): glsl: Optimize min/max expression trees glsl: Fix directory handling in optimization-test glsl: Refactor the python test case generator glsl: Make compare_ir sort expression operands for commutative operations glsl: Generalize assignment and declaration IR sexp creation functions glsl: Add const_vec4 IR sexp creation function to test_case_generator.py glsl: Add min and max IR sexp creation functions to test_case_generator.py glsl: Add support for do_minmax_prune in test_optpass glsl: Add tests for minmax prune src/glsl/Makefile.sources | 1 + src/glsl/glsl_parser_extras.cpp | 1 + src/glsl/ir_optimization.h | 1 + src/glsl/opt_minmax.cpp | 395 ++++++++++++++++++++++++ src/glsl/test_optpass.cpp | 2 + src/glsl/tests/compare_ir | 4 +- src/glsl/tests/lower_jumps/create_test_cases.py | 336 +++----------------- src/glsl/tests/minmax/.gitignore | 3 + src/glsl/tests/minmax/create_test_cases.py | 151 +++++++++ src/glsl/tests/optimization-test | 2 +- src/glsl/tests/sexps.py | 37 +++ src/glsl/tests/test_case_generator.py | 325 +++++++++++++++++++ 12 files changed, 960 insertions(+), 298 deletions(-) create mode 100644 src/glsl/opt_minmax.cpp create mode 100644 src/glsl/tests/minmax/.gitignore create mode 100644 src/glsl/tests/minmax/create_test_cases.py create mode 100644 src/glsl/tests/test_case_generator.py -- 2.0.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev