From: Ian Romanick <ian.d.roman...@intel.com> ir_rvalue_visitor visits each rvalue on exit. When visiting a large expression, the leaf expressions will be visited and eliminated first. Once one leaf expression was replaced, it would no longer match a potentially much larger tree. This means that code like:
x = a + (b * c); y = -(a + (b * c)); would effectively be replaced by tmp = b * c; x = a + tmp; y = -(a + tmp); As a result both opportunities for generating a MAD would be lost, and we would generate worse code. Using ir_rvalue_enter_visitor means that larger expression trees will be checked first, and we have the potential to eliminate much larger expressions. I believe that opt_cse.cpp predates the existence of ir_rvalue_enter_visitor. Shader-db results: GM45: total instructions in shared programs: 4063165 -> 4061744 (-0.03%) instructions in affected programs: 21664 -> 20243 (-6.56%) helped: 259 GM45 NIR: total instructions in shared programs: 4082044 -> 4080646 (-0.03%) instructions in affected programs: 21091 -> 19693 (-6.63%) helped: 255 HURT: 1 Iron Lake: total instructions in shared programs: 5480334 -> 5478897 (-0.03%) instructions in affected programs: 25798 -> 24361 (-5.57%) helped: 273 HURT: 1 Iron Lake NIR: total instructions in shared programs: 5678776 -> 5677395 (-0.02%) instructions in affected programs: 21744 -> 20363 (-6.35%) helped: 263 HURT: 2 Sandy Bridge: total instructions in shared programs: 7318903 -> 7316983 (-0.03%) instructions in affected programs: 37937 -> 36017 (-5.06%) helped: 398 HURT: 26 Sandy Bridge NIR: total instructions in shared programs: 7329995 -> 7328069 (-0.03%) instructions in affected programs: 32487 -> 30561 (-5.93%) helped: 384 HURT: 6 Ivy Bridge: total instructions in shared programs: 6766579 -> 6765409 (-0.02%) instructions in affected programs: 18110 -> 16940 (-6.46%) helped: 288 HURT: 16 GAINED: 1 Ivy Bridge NIR: total instructions in shared programs: 6769314 -> 6768159 (-0.02%) instructions in affected programs: 11063 -> 9908 (-10.44%) helped: 264 HURT: 6 Haswell: total instructions in shared programs: 6226294 -> 6225102 (-0.02%) instructions in affected programs: 17555 -> 16363 (-6.79%) helped: 297 HURT: 10 GAINED: 1 Haswell NIR: total instructions in shared programs: 6183693 -> 6182538 (-0.02%) instructions in affected programs: 10990 -> 9835 (-10.51%) helped: 264 HURT: 6 Broadwell: total instructions in shared programs: 7285895 -> 7284537 (-0.02%) instructions in affected programs: 31977 -> 30619 (-4.25%) helped: 357 HURT: 6 Broadwell NIR: total instructions in shared programs: 7501711 -> 7501544 (-0.00%) instructions in affected programs: 7174 -> 7007 (-2.33%) helped: 87 HURT: 2 Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- src/glsl/opt_cse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/glsl/opt_cse.cpp b/src/glsl/opt_cse.cpp index 4b8e9a0..425eebc 100644 --- a/src/glsl/opt_cse.cpp +++ b/src/glsl/opt_cse.cpp @@ -99,7 +99,7 @@ public: ir_variable *var; }; -class cse_visitor : public ir_rvalue_visitor { +class cse_visitor : public ir_rvalue_enter_visitor { public: cse_visitor(exec_list *validate_instructions) : validate_instructions(validate_instructions) -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev