i965/vec4: Call opt_algebraic after opt_cse.
authorMatt Turner <mattst88@gmail.com>
Sat, 27 Sep 2014 17:34:07 +0000 (10:34 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 1 Oct 2014 00:09:34 +0000 (17:09 -0700)
The next patch adds an algebraic optimization for the pattern

   sqrt a, b
   rcp  c, a

and turns it into

   sqrt a, b
   rsq  c, b

but many vertex shaders do

   a = sqrt(b);
   var1 /= a;
   var2 /= a;

which generates

   sqrt a, b
   rcp  c, a
   rcp  d, a

If we apply the algebraic optimization before CSE, we'll end up with

   sqrt a, b
   rsq  c, b
   rcp  d, a

Applying CSE combines the RCP instructions, preventing this from
happening.

No shader-db changes.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_vec4.cpp

index 022ed37a8ef01058480d1e836ad85e5abf51e884..e0a3d5fa7864d682b7f75badf323e95ea7ea7d0a 100644 (file)
@@ -1790,8 +1790,8 @@ vec4_visitor::run()
       OPT(dead_code_eliminate);
       OPT(dead_control_flow_eliminate, this);
       OPT(opt_copy_propagation);
-      OPT(opt_algebraic);
       OPT(opt_cse);
+      OPT(opt_algebraic);
       OPT(opt_register_coalesce);
    } while (progress);