[Mesa-dev] [PATCH 1/5] glsl/cse: Use ir_rvalue_enter_visitor instead of ir_rvalue_visitor

Matt Turner mattst88 at gmail.com
Thu Apr 9 09:18:37 PDT 2015


On Wed, Apr 8, 2015 at 4:38 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at 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.

Nope, git disagrees.

Reviewed-by: Matt Turner <mattst88 at gmail.com>

>
> 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.romanick at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list