[Mesa-dev] Case where opt_copy_propagation doesn't do its job

Bryan Cain bryancain3 at gmail.com
Tue Jul 12 13:44:12 PDT 2011


It appears that the copy propagation pass in the GLSL compiler (in
opt_copy_propagation.cpp) doesn't do copy propagation when the
components of a variable are initialized separately, like this:

(declare (temporary ) vec4 vec_ctor)
(assign  (w) (var_ref vec_ctor)  (constant float (1.000000)) )
(assign  (xyz) (var_ref vec_ctor)  (var_ref assignment_tmp at 16) )
(assign  (xyzw) (var_ref gl_FragColor)  (var_ref vec_ctor) )

In the past, this wasn't visible in the Mesa IR output because Mesa IR
optimization seems to do the copy propagation.  However, glsl_to_tgsi
doesn't do copy propagation to output registers - in fact, I believe
this is the only case left where ir_to_mesa produces better code than
glsl_to_tgsi.  I'm not very enthusiastic about the idea adding to the
copy propagation pass in glsl_to_tgsi, since this case is something that
should really be optimized by the GLSL compiler before it reaches the IR
backend.

So, is there a reason why the GLSL copy propagation pass doesn't operate
per-component?

Bryan


More information about the mesa-dev mailing list