From: Ian Romanick <[email protected]> An expression like 'mix(false, true, condition)' is the same as just 'condition'. Similarly, an expression like 'mix(true, false, condition)' is the same as just '!condition'.
Expressions like 'mix(true, true, condition)' should already be handled elsewhere. Many, many more of the shaders hurt by "glsl: Optimize certain if-statements to ir_triop_csel" are even or impoved now. The helped vs. hurt ratio is 2323:307 on Ivy Bride without NIR, and it is still 1045:1975. Shader-db results: GM45 (0x2A42): total instructions in shared programs: 3545378 -> 3544299 (-0.03%) instructions in affected programs: 115235 -> 114156 (-0.94%) helped: 393 Iron Lake (0x0046): total instructions in shared programs: 4975572 -> 4974090 (-0.03%) instructions in affected programs: 150594 -> 149112 (-0.98%) helped: 534 Sandy Bridge (0x0116): total instructions in shared programs: 6800913 -> 6799711 (-0.02%) instructions in affected programs: 196165 -> 194963 (-0.61%) helped: 808 Sandy Bridge (0x0116) NIR: total instructions in shared programs: 6815782 -> 6792447 (-0.34%) instructions in affected programs: 198743 -> 175408 (-11.74%) helped: 656 HURT: 152 Ivy Bridge (0x0166): total instructions in shared programs: 6275305 -> 6274069 (-0.02%) instructions in affected programs: 181703 -> 180467 (-0.68%) helped: 798 Ivy Bridge (0x0166) NIR: total instructions in shared programs: 6322876 -> 6300986 (-0.35%) instructions in affected programs: 185337 -> 163447 (-11.81%) helped: 650 HURT: 152 GAINED: 2 Haswell (0x0426): total instructions in shared programs: 5761392 -> 5760186 (-0.02%) instructions in affected programs: 160962 -> 159756 (-0.75%) helped: 798 Haswell (0x0426) NIR: total instructions in shared programs: 5798963 -> 5780281 (-0.32%) instructions in affected programs: 163859 -> 145177 (-11.40%) helped: 650 HURT: 152 GAINED: 2 Broadwell (0x162E): total instructions in shared programs: 6809460 -> 6808264 (-0.02%) instructions in affected programs: 162030 -> 160834 (-0.74%) helped: 802 Broadwell (0x162E) NIR: total instructions in shared programs: 7013761 -> 6994887 (-0.27%) instructions in affected programs: 163346 -> 144472 (-11.55%) helped: 650 HURT: 152 GAINED: 4 Signed-off-by: Ian Romanick <[email protected]> --- src/glsl/opt_algebraic.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp index 7d58e9b..0f15f52 100644 --- a/src/glsl/opt_algebraic.cpp +++ b/src/glsl/opt_algebraic.cpp @@ -1121,6 +1121,20 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) return ir->operands[1]; if (is_vec_zero(op_const[0])) return ir->operands[2]; + + if (ir->type->base_type == GLSL_TYPE_BOOL) { + /* Optimize an expression like 'mix(false, true, condition)' to + * just 'condition'. + */ + if (is_vec_zero(op_const[1]) && is_vec_one(op_const[2])) + return ir->operands[0]; + + /* Optimize an expression like 'mix(true, false, condition)' to + * just '!condition'. + */ + if (is_vec_one(op_const[1]) && is_vec_zero(op_const[2])) + return logic_not(ir->operands[0]); + } break; default: -- 2.1.0 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
