On 08/28/2013 11:17 PM, Kenneth Graunke wrote:
On 08/27/2013 11:34 PM, Liu Xin wrote:
Hi, Mesa community,

I am not familiar with S-expression or other forms of lisp languages.

That's OK - the IR has no resemblance to actual Scheme or Lisp programming. We just print and read the () syntax because it's simple.

indeed, I gradually realize glsl IR is not same from lisp at all. in lisp, (if (cond) (then) (else)) is an expression. I found that ir_if in is not a subclass of ir_rvalue. it's a statement . that is to say, glsl IR is not functional language. it's a procedural language with a lot of parentheses.


I am working on GLSL IR transformation. for example, i want to change a
variable to a array of same type.

By now , i can find the definition of a variable. How can i update all
uses of this variable in S-expression? I think all uses of this variable
are in the form of ir_dereference_variable.

That's right.  ir_dereference_variable is an actual use of a variable.

The difficulty is how to  collect d-u chain using hierarchical visitor.

Yeah...sadly, the compiler doesn't have UD chains. Ian was working on those a few years back, but the code never landed.

I think some optimizer
authors  must have the same problem. Could you give me a pass which
solved my problem?  so I can take reference.

You might look at opt_array_splitting.  It uses two visitors:

First, ir_array_reference_visitor walks over the IR and finds variables it might want to transform, storing those in a hash table. As a second pass, ir_array_splitting_visitor walks over the IR and actually transforms things.

ir_array_splitting_visitor is also an ir_rvalue visitor, which is useful for transforming expression trees. You get passed an ir_rvalue ** pointer, and can replace a whole subexpression tree with something else. In your case, you'll probably find ir_dereference_variables and replace them with ir_dereference_arrays. (In the printed IR, replace (var_ref foo) with (array_ref (var_ref new_foo_array) ...subscript...).)

Good luck!

--Ken
yes, your pointers are really helpful.   thank you.

--lx

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to