mesa: add support for ARB_blend_func_extended (v4)
[profile/ivi/mesa.git] / src / glsl / ir.h
1 /* -*- c++ -*- */
2 /*
3  * Copyright © 2010 Intel Corporation
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24
25 #pragma once
26 #ifndef IR_H
27 #define IR_H
28
29 #include <stdio.h>
30 #include <stdlib.h>
31
32 #include "ralloc.h"
33 #include "glsl_types.h"
34 #include "list.h"
35 #include "ir_visitor.h"
36 #include "ir_hierarchical_visitor.h"
37 #include "main/mtypes.h"
38
39 /**
40  * \defgroup IR Intermediate representation nodes
41  *
42  * @{
43  */
44
45 /**
46  * Class tags
47  *
48  * Each concrete class derived from \c ir_instruction has a value in this
49  * enumerant.  The value for the type is stored in \c ir_instruction::ir_type
50  * by the constructor.  While using type tags is not very C++, it is extremely
51  * convenient.  For example, during debugging you can simply inspect
52  * \c ir_instruction::ir_type to find out the actual type of the object.
53  *
54  * In addition, it is possible to use a switch-statement based on \c
55  * \c ir_instruction::ir_type to select different behavior for different object
56  * types.  For functions that have only slight differences for several object
57  * types, this allows writing very straightforward, readable code.
58  */
59 enum ir_node_type {
60    /**
61     * Zero is unused so that the IR validator can detect cases where
62     * \c ir_instruction::ir_type has not been initialized.
63     */
64    ir_type_unset,
65    ir_type_variable,
66    ir_type_assignment,
67    ir_type_call,
68    ir_type_constant,
69    ir_type_dereference_array,
70    ir_type_dereference_record,
71    ir_type_dereference_variable,
72    ir_type_discard,
73    ir_type_expression,
74    ir_type_function,
75    ir_type_function_signature,
76    ir_type_if,
77    ir_type_loop,
78    ir_type_loop_jump,
79    ir_type_return,
80    ir_type_swizzle,
81    ir_type_texture,
82    ir_type_max /**< maximum ir_type enum number, for validation */
83 };
84
85 /**
86  * Base class of all IR instructions
87  */
88 class ir_instruction : public exec_node {
89 public:
90    enum ir_node_type ir_type;
91
92    /** ir_print_visitor helper for debugging. */
93    void print(void) const;
94
95    virtual void accept(ir_visitor *) = 0;
96    virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
97    virtual ir_instruction *clone(void *mem_ctx,
98                                  struct hash_table *ht) const = 0;
99
100    /**
101     * \name IR instruction downcast functions
102     *
103     * These functions either cast the object to a derived class or return
104     * \c NULL if the object's type does not match the specified derived class.
105     * Additional downcast functions will be added as needed.
106     */
107    /*@{*/
108    virtual class ir_variable *          as_variable()         { return NULL; }
109    virtual class ir_function *          as_function()         { return NULL; }
110    virtual class ir_dereference *       as_dereference()      { return NULL; }
111    virtual class ir_dereference_array * as_dereference_array() { return NULL; }
112    virtual class ir_dereference_variable *as_dereference_variable() { return NULL; }
113    virtual class ir_expression *        as_expression()       { return NULL; }
114    virtual class ir_rvalue *            as_rvalue()           { return NULL; }
115    virtual class ir_loop *              as_loop()             { return NULL; }
116    virtual class ir_assignment *        as_assignment()       { return NULL; }
117    virtual class ir_call *              as_call()             { return NULL; }
118    virtual class ir_return *            as_return()           { return NULL; }
119    virtual class ir_if *                as_if()               { return NULL; }
120    virtual class ir_swizzle *           as_swizzle()          { return NULL; }
121    virtual class ir_constant *          as_constant()         { return NULL; }
122    virtual class ir_discard *           as_discard()          { return NULL; }
123    /*@}*/
124
125 protected:
126    ir_instruction()
127    {
128       ir_type = ir_type_unset;
129    }
130 };
131
132
133 /**
134  * The base class for all "values"/expression trees.
135  */
136 class ir_rvalue : public ir_instruction {
137 public:
138    const struct glsl_type *type;
139
140    virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const;
141
142    virtual void accept(ir_visitor *v)
143    {
144       v->visit(this);
145    }
146
147    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
148
149    virtual ir_constant *constant_expression_value();
150
151    virtual ir_rvalue * as_rvalue()
152    {
153       return this;
154    }
155
156    ir_rvalue *as_rvalue_to_saturate();
157
158    virtual bool is_lvalue() const
159    {
160       return false;
161    }
162
163    /**
164     * Get the variable that is ultimately referenced by an r-value
165     */
166    virtual ir_variable *variable_referenced() const
167    {
168       return NULL;
169    }
170
171
172    /**
173     * If an r-value is a reference to a whole variable, get that variable
174     *
175     * \return
176     * Pointer to a variable that is completely dereferenced by the r-value.  If
177     * the r-value is not a dereference or the dereference does not access the
178     * entire variable (i.e., it's just one array element, struct field), \c NULL
179     * is returned.
180     */
181    virtual ir_variable *whole_variable_referenced()
182    {
183       return NULL;
184    }
185
186    /**
187     * Determine if an r-value has the value zero
188     *
189     * The base implementation of this function always returns \c false.  The
190     * \c ir_constant class over-rides this function to return \c true \b only
191     * for vector and scalar types that have all elements set to the value
192     * zero (or \c false for booleans).
193     *
194     * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
195     */
196    virtual bool is_zero() const;
197
198    /**
199     * Determine if an r-value has the value one
200     *
201     * The base implementation of this function always returns \c false.  The
202     * \c ir_constant class over-rides this function to return \c true \b only
203     * for vector and scalar types that have all elements set to the value
204     * one (or \c true for booleans).
205     *
206     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
207     */
208    virtual bool is_one() const;
209
210    /**
211     * Determine if an r-value has the value negative one
212     *
213     * The base implementation of this function always returns \c false.  The
214     * \c ir_constant class over-rides this function to return \c true \b only
215     * for vector and scalar types that have all elements set to the value
216     * negative one.  For boolean times, the result is always \c false.
217     *
218     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
219     */
220    virtual bool is_negative_one() const;
221
222
223    /**
224     * Return a generic value of error_type.
225     *
226     * Allocation will be performed with 'mem_ctx' as ralloc owner.
227     */
228    static ir_rvalue *error_value(void *mem_ctx);
229
230 protected:
231    ir_rvalue();
232 };
233
234
235 /**
236  * Variable storage classes
237  */
238 enum ir_variable_mode {
239    ir_var_auto = 0,     /**< Function local variables and globals. */
240    ir_var_uniform,      /**< Variable declared as a uniform. */
241    ir_var_in,
242    ir_var_out,
243    ir_var_inout,
244    ir_var_const_in,     /**< "in" param that must be a constant expression */
245    ir_var_system_value, /**< Ex: front-face, instance-id, etc. */
246    ir_var_temporary     /**< Temporary variable generated during compilation. */
247 };
248
249 /**
250  * \brief Layout qualifiers for gl_FragDepth.
251  *
252  * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared
253  * with a layout qualifier.
254  */
255 enum ir_depth_layout {
256     ir_depth_layout_none, /**< No depth layout is specified. */
257     ir_depth_layout_any,
258     ir_depth_layout_greater,
259     ir_depth_layout_less,
260     ir_depth_layout_unchanged
261 };
262
263 /**
264  * \brief Convert depth layout qualifier to string.
265  */
266 const char*
267 depth_layout_string(ir_depth_layout layout);
268
269 /**
270  * Description of built-in state associated with a uniform
271  *
272  * \sa ir_variable::state_slots
273  */
274 struct ir_state_slot {
275    int tokens[5];
276    int swizzle;
277 };
278
279 class ir_variable : public ir_instruction {
280 public:
281    ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
282
283    virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const;
284
285    virtual ir_variable *as_variable()
286    {
287       return this;
288    }
289
290    virtual void accept(ir_visitor *v)
291    {
292       v->visit(this);
293    }
294
295    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
296
297
298    /**
299     * Get the string value for the interpolation qualifier
300     *
301     * \return The string that would be used in a shader to specify \c
302     * mode will be returned.
303     *
304     * This function is used to generate error messages of the form "shader
305     * uses %s interpolation qualifier", so in the case where there is no
306     * interpolation qualifier, it returns "no".
307     *
308     * This function should only be used on a shader input or output variable.
309     */
310    const char *interpolation_string() const;
311
312    /**
313     * Determine how this variable should be interpolated based on its
314     * interpolation qualifier (if present), whether it is gl_Color or
315     * gl_SecondaryColor, and whether flatshading is enabled in the current GL
316     * state.
317     *
318     * The return value will always be either INTERP_QUALIFIER_SMOOTH,
319     * INTERP_QUALIFIER_NOPERSPECTIVE, or INTERP_QUALIFIER_FLAT.
320     */
321    glsl_interp_qualifier determine_interpolation_mode(bool flat_shade);
322
323    /**
324     * Declared type of the variable
325     */
326    const struct glsl_type *type;
327
328    /**
329     * Delcared name of the variable
330     */
331    const char *name;
332
333    /**
334     * Highest element accessed with a constant expression array index
335     *
336     * Not used for non-array variables.
337     */
338    unsigned max_array_access;
339
340    /**
341     * Is the variable read-only?
342     *
343     * This is set for variables declared as \c const, shader inputs,
344     * and uniforms.
345     */
346    unsigned read_only:1;
347    unsigned centroid:1;
348    unsigned invariant:1;
349
350    /**
351     * Has this variable been used for reading or writing?
352     *
353     * Several GLSL semantic checks require knowledge of whether or not a
354     * variable has been used.  For example, it is an error to redeclare a
355     * variable as invariant after it has been used.
356     */
357    unsigned used:1;
358
359    /**
360     * Storage class of the variable.
361     *
362     * \sa ir_variable_mode
363     */
364    unsigned mode:3;
365
366    /**
367     * Interpolation mode for shader inputs / outputs
368     *
369     * \sa ir_variable_interpolation
370     */
371    unsigned interpolation:2;
372
373    /**
374     * \name ARB_fragment_coord_conventions
375     * @{
376     */
377    unsigned origin_upper_left:1;
378    unsigned pixel_center_integer:1;
379    /*@}*/
380
381    /**
382     * Was the location explicitly set in the shader?
383     *
384     * If the location is explicitly set in the shader, it \b cannot be changed
385     * by the linker or by the API (e.g., calls to \c glBindAttribLocation have
386     * no effect).
387     */
388    unsigned explicit_location:1;
389
390    /**
391     * Does this variable have an initializer?
392     *
393     * This is used by the linker to cross-validiate initializers of global
394     * variables.
395     */
396    unsigned has_initializer:1;
397
398    /**
399     * \brief Layout qualifier for gl_FragDepth.
400     *
401     * This is not equal to \c ir_depth_layout_none if and only if this
402     * variable is \c gl_FragDepth and a layout qualifier is specified.
403     */
404    ir_depth_layout depth_layout;
405
406    /**
407     * Storage location of the base of this variable
408     *
409     * The precise meaning of this field depends on the nature of the variable.
410     *
411     *   - Vertex shader input: one of the values from \c gl_vert_attrib.
412     *   - Vertex shader output: one of the values from \c gl_vert_result.
413     *   - Fragment shader input: one of the values from \c gl_frag_attrib.
414     *   - Fragment shader output: one of the values from \c gl_frag_result.
415     *   - Uniforms: Per-stage uniform slot number.
416     *   - Other: This field is not currently used.
417     *
418     * If the variable is a uniform, shader input, or shader output, and the
419     * slot has not been assigned, the value will be -1.
420     */
421    int location;
422
423    /**
424     * output index for dual source blending.
425     */
426    int index;
427
428    /**
429     * Built-in state that backs this uniform
430     *
431     * Once set at variable creation, \c state_slots must remain invariant.
432     * This is because, ideally, this array would be shared by all clones of
433     * this variable in the IR tree.  In other words, we'd really like for it
434     * to be a fly-weight.
435     *
436     * If the variable is not a uniform, \c num_state_slots will be zero and
437     * \c state_slots will be \c NULL.
438     */
439    /*@{*/
440    unsigned num_state_slots;    /**< Number of state slots used */
441    ir_state_slot *state_slots;  /**< State descriptors. */
442    /*@}*/
443
444    /**
445     * Emit a warning if this variable is accessed.
446     */
447    const char *warn_extension;
448
449    /**
450     * Value assigned in the initializer of a variable declared "const"
451     */
452    ir_constant *constant_value;
453
454    /**
455     * Constant expression assigned in the initializer of the variable
456     *
457     * \warning
458     * This field and \c ::constant_value are distinct.  Even if the two fields
459     * refer to constants with the same value, they must point to separate
460     * objects.
461     */
462    ir_constant *constant_initializer;
463 };
464
465
466 /*@{*/
467 /**
468  * The representation of a function instance; may be the full definition or
469  * simply a prototype.
470  */
471 class ir_function_signature : public ir_instruction {
472    /* An ir_function_signature will be part of the list of signatures in
473     * an ir_function.
474     */
475 public:
476    ir_function_signature(const glsl_type *return_type);
477
478    virtual ir_function_signature *clone(void *mem_ctx,
479                                         struct hash_table *ht) const;
480    ir_function_signature *clone_prototype(void *mem_ctx,
481                                           struct hash_table *ht) const;
482
483    virtual void accept(ir_visitor *v)
484    {
485       v->visit(this);
486    }
487
488    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
489
490    /**
491     * Attempt to evaluate this function as a constant expression, given
492     * a list of the actual parameters.  Returns NULL for non-built-ins.
493     */
494    ir_constant *constant_expression_value(exec_list *actual_parameters);
495
496    /**
497     * Get the name of the function for which this is a signature
498     */
499    const char *function_name() const;
500
501    /**
502     * Get a handle to the function for which this is a signature
503     *
504     * There is no setter function, this function returns a \c const pointer,
505     * and \c ir_function_signature::_function is private for a reason.  The
506     * only way to make a connection between a function and function signature
507     * is via \c ir_function::add_signature.  This helps ensure that certain
508     * invariants (i.e., a function signature is in the list of signatures for
509     * its \c _function) are met.
510     *
511     * \sa ir_function::add_signature
512     */
513    inline const class ir_function *function() const
514    {
515       return this->_function;
516    }
517
518    /**
519     * Check whether the qualifiers match between this signature's parameters
520     * and the supplied parameter list.  If not, returns the name of the first
521     * parameter with mismatched qualifiers (for use in error messages).
522     */
523    const char *qualifiers_match(exec_list *params);
524
525    /**
526     * Replace the current parameter list with the given one.  This is useful
527     * if the current information came from a prototype, and either has invalid
528     * or missing parameter names.
529     */
530    void replace_parameters(exec_list *new_params);
531
532    /**
533     * Function return type.
534     *
535     * \note This discards the optional precision qualifier.
536     */
537    const struct glsl_type *return_type;
538
539    /**
540     * List of ir_variable of function parameters.
541     *
542     * This represents the storage.  The paramaters passed in a particular
543     * call will be in ir_call::actual_paramaters.
544     */
545    struct exec_list parameters;
546
547    /** Whether or not this function has a body (which may be empty). */
548    unsigned is_defined:1;
549
550    /** Whether or not this function signature is a built-in. */
551    unsigned is_builtin:1;
552
553    /** Body of instructions in the function. */
554    struct exec_list body;
555
556 private:
557    /** Function of which this signature is one overload. */
558    class ir_function *_function;
559
560    friend class ir_function;
561 };
562
563
564 /**
565  * Header for tracking multiple overloaded functions with the same name.
566  * Contains a list of ir_function_signatures representing each of the
567  * actual functions.
568  */
569 class ir_function : public ir_instruction {
570 public:
571    ir_function(const char *name);
572
573    virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const;
574
575    virtual ir_function *as_function()
576    {
577       return this;
578    }
579
580    virtual void accept(ir_visitor *v)
581    {
582       v->visit(this);
583    }
584
585    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
586
587    void add_signature(ir_function_signature *sig)
588    {
589       sig->_function = this;
590       this->signatures.push_tail(sig);
591    }
592
593    /**
594     * Get an iterator for the set of function signatures
595     */
596    exec_list_iterator iterator()
597    {
598       return signatures.iterator();
599    }
600
601    /**
602     * Find a signature that matches a set of actual parameters, taking implicit
603     * conversions into account.  Also flags whether the match was exact.
604     */
605    ir_function_signature *matching_signature(const exec_list *actual_param,
606                                              bool *match_is_exact);
607
608    /**
609     * Find a signature that matches a set of actual parameters, taking implicit
610     * conversions into account.
611     */
612    ir_function_signature *matching_signature(const exec_list *actual_param);
613
614    /**
615     * Find a signature that exactly matches a set of actual parameters without
616     * any implicit type conversions.
617     */
618    ir_function_signature *exact_matching_signature(const exec_list *actual_ps);
619
620    /**
621     * Name of the function.
622     */
623    const char *name;
624
625    /** Whether or not this function has a signature that isn't a built-in. */
626    bool has_user_signature();
627
628    /**
629     * List of ir_function_signature for each overloaded function with this name.
630     */
631    struct exec_list signatures;
632 };
633
634 inline const char *ir_function_signature::function_name() const
635 {
636    return this->_function->name;
637 }
638 /*@}*/
639
640
641 /**
642  * IR instruction representing high-level if-statements
643  */
644 class ir_if : public ir_instruction {
645 public:
646    ir_if(ir_rvalue *condition)
647       : condition(condition)
648    {
649       ir_type = ir_type_if;
650    }
651
652    virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const;
653
654    virtual ir_if *as_if()
655    {
656       return this;
657    }
658
659    virtual void accept(ir_visitor *v)
660    {
661       v->visit(this);
662    }
663
664    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
665
666    ir_rvalue *condition;
667    /** List of ir_instruction for the body of the then branch */
668    exec_list  then_instructions;
669    /** List of ir_instruction for the body of the else branch */
670    exec_list  else_instructions;
671 };
672
673
674 /**
675  * IR instruction representing a high-level loop structure.
676  */
677 class ir_loop : public ir_instruction {
678 public:
679    ir_loop();
680
681    virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
682
683    virtual void accept(ir_visitor *v)
684    {
685       v->visit(this);
686    }
687
688    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
689
690    virtual ir_loop *as_loop()
691    {
692       return this;
693    }
694
695    /**
696     * Get an iterator for the instructions of the loop body
697     */
698    exec_list_iterator iterator()
699    {
700       return body_instructions.iterator();
701    }
702
703    /** List of ir_instruction that make up the body of the loop. */
704    exec_list body_instructions;
705
706    /**
707     * \name Loop counter and controls
708     *
709     * Represents a loop like a FORTRAN \c do-loop.
710     *
711     * \note
712     * If \c from and \c to are the same value, the loop will execute once.
713     */
714    /*@{*/
715    ir_rvalue *from;             /** Value of the loop counter on the first
716                                  * iteration of the loop.
717                                  */
718    ir_rvalue *to;               /** Value of the loop counter on the last
719                                  * iteration of the loop.
720                                  */
721    ir_rvalue *increment;
722    ir_variable *counter;
723
724    /**
725     * Comparison operation in the loop terminator.
726     *
727     * If any of the loop control fields are non-\c NULL, this field must be
728     * one of \c ir_binop_less, \c ir_binop_greater, \c ir_binop_lequal,
729     * \c ir_binop_gequal, \c ir_binop_equal, or \c ir_binop_nequal.
730     */
731    int cmp;
732    /*@}*/
733 };
734
735
736 class ir_assignment : public ir_instruction {
737 public:
738    ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition = NULL);
739
740    /**
741     * Construct an assignment with an explicit write mask
742     *
743     * \note
744     * Since a write mask is supplied, the LHS must already be a bare
745     * \c ir_dereference.  The cannot be any swizzles in the LHS.
746     */
747    ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, ir_rvalue *condition,
748                  unsigned write_mask);
749
750    virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const;
751
752    virtual ir_constant *constant_expression_value();
753
754    virtual void accept(ir_visitor *v)
755    {
756       v->visit(this);
757    }
758
759    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
760
761    virtual ir_assignment * as_assignment()
762    {
763       return this;
764    }
765
766    /**
767     * Get a whole variable written by an assignment
768     *
769     * If the LHS of the assignment writes a whole variable, the variable is
770     * returned.  Otherwise \c NULL is returned.  Examples of whole-variable
771     * assignment are:
772     *
773     *  - Assigning to a scalar
774     *  - Assigning to all components of a vector
775     *  - Whole array (or matrix) assignment
776     *  - Whole structure assignment
777     */
778    ir_variable *whole_variable_written();
779
780    /**
781     * Set the LHS of an assignment
782     */
783    void set_lhs(ir_rvalue *lhs);
784
785    /**
786     * Left-hand side of the assignment.
787     *
788     * This should be treated as read only.  If you need to set the LHS of an
789     * assignment, use \c ir_assignment::set_lhs.
790     */
791    ir_dereference *lhs;
792
793    /**
794     * Value being assigned
795     */
796    ir_rvalue *rhs;
797
798    /**
799     * Optional condition for the assignment.
800     */
801    ir_rvalue *condition;
802
803
804    /**
805     * Component mask written
806     *
807     * For non-vector types in the LHS, this field will be zero.  For vector
808     * types, a bit will be set for each component that is written.  Note that
809     * for \c vec2 and \c vec3 types only the lower bits will ever be set.
810     *
811     * A partially-set write mask means that each enabled channel gets
812     * the value from a consecutive channel of the rhs.  For example,
813     * to write just .xyw of gl_FrontColor with color:
814     *
815     * (assign (constant bool (1)) (xyw)
816     *     (var_ref gl_FragColor)
817     *     (swiz xyw (var_ref color)))
818     */
819    unsigned write_mask:4;
820 };
821
822 /* Update ir_expression::num_operands() and operator_strs when
823  * updating this list.
824  */
825 enum ir_expression_operation {
826    ir_unop_bit_not,
827    ir_unop_logic_not,
828    ir_unop_neg,
829    ir_unop_abs,
830    ir_unop_sign,
831    ir_unop_rcp,
832    ir_unop_rsq,
833    ir_unop_sqrt,
834    ir_unop_exp,      /**< Log base e on gentype */
835    ir_unop_log,      /**< Natural log on gentype */
836    ir_unop_exp2,
837    ir_unop_log2,
838    ir_unop_f2i,      /**< Float-to-integer conversion. */
839    ir_unop_i2f,      /**< Integer-to-float conversion. */
840    ir_unop_f2b,      /**< Float-to-boolean conversion */
841    ir_unop_b2f,      /**< Boolean-to-float conversion */
842    ir_unop_i2b,      /**< int-to-boolean conversion */
843    ir_unop_b2i,      /**< Boolean-to-int conversion */
844    ir_unop_u2f,      /**< Unsigned-to-float conversion. */
845    ir_unop_i2u,      /**< Integer-to-unsigned conversion. */
846    ir_unop_u2i,      /**< Unsigned-to-integer conversion. */
847    ir_unop_any,
848
849    /**
850     * \name Unary floating-point rounding operations.
851     */
852    /*@{*/
853    ir_unop_trunc,
854    ir_unop_ceil,
855    ir_unop_floor,
856    ir_unop_fract,
857    ir_unop_round_even,
858    /*@}*/
859
860    /**
861     * \name Trigonometric operations.
862     */
863    /*@{*/
864    ir_unop_sin,
865    ir_unop_cos,
866    ir_unop_sin_reduced,    /**< Reduced range sin. [-pi, pi] */
867    ir_unop_cos_reduced,    /**< Reduced range cos. [-pi, pi] */
868    /*@}*/
869
870    /**
871     * \name Partial derivatives.
872     */
873    /*@{*/
874    ir_unop_dFdx,
875    ir_unop_dFdy,
876    /*@}*/
877
878    ir_unop_noise,
879
880    /**
881     * A sentinel marking the last of the unary operations.
882     */
883    ir_last_unop = ir_unop_noise,
884
885    ir_binop_add,
886    ir_binop_sub,
887    ir_binop_mul,
888    ir_binop_div,
889
890    /**
891     * Takes one of two combinations of arguments:
892     *
893     * - mod(vecN, vecN)
894     * - mod(vecN, float)
895     *
896     * Does not take integer types.
897     */
898    ir_binop_mod,
899
900    /**
901     * \name Binary comparison operators which return a boolean vector.
902     * The type of both operands must be equal.
903     */
904    /*@{*/
905    ir_binop_less,
906    ir_binop_greater,
907    ir_binop_lequal,
908    ir_binop_gequal,
909    ir_binop_equal,
910    ir_binop_nequal,
911    /**
912     * Returns single boolean for whether all components of operands[0]
913     * equal the components of operands[1].
914     */
915    ir_binop_all_equal,
916    /**
917     * Returns single boolean for whether any component of operands[0]
918     * is not equal to the corresponding component of operands[1].
919     */
920    ir_binop_any_nequal,
921    /*@}*/
922
923    /**
924     * \name Bit-wise binary operations.
925     */
926    /*@{*/
927    ir_binop_lshift,
928    ir_binop_rshift,
929    ir_binop_bit_and,
930    ir_binop_bit_xor,
931    ir_binop_bit_or,
932    /*@}*/
933
934    ir_binop_logic_and,
935    ir_binop_logic_xor,
936    ir_binop_logic_or,
937
938    ir_binop_dot,
939    ir_binop_min,
940    ir_binop_max,
941
942    ir_binop_pow,
943
944    /**
945     * A sentinel marking the last of the binary operations.
946     */
947    ir_last_binop = ir_binop_pow,
948
949    ir_quadop_vector,
950
951    /**
952     * A sentinel marking the last of all operations.
953     */
954    ir_last_opcode = ir_last_binop
955 };
956
957 class ir_expression : public ir_rvalue {
958 public:
959    /**
960     * Constructor for unary operation expressions
961     */
962    ir_expression(int op, const struct glsl_type *type, ir_rvalue *);
963    ir_expression(int op, ir_rvalue *);
964
965    /**
966     * Constructor for binary operation expressions
967     */
968    ir_expression(int op, const struct glsl_type *type,
969                  ir_rvalue *, ir_rvalue *);
970    ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1);
971
972    /**
973     * Constructor for quad operator expressions
974     */
975    ir_expression(int op, const struct glsl_type *type,
976                  ir_rvalue *, ir_rvalue *, ir_rvalue *, ir_rvalue *);
977
978    virtual ir_expression *as_expression()
979    {
980       return this;
981    }
982
983    virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const;
984
985    /**
986     * Attempt to constant-fold the expression
987     *
988     * If the expression cannot be constant folded, this method will return
989     * \c NULL.
990     */
991    virtual ir_constant *constant_expression_value();
992
993    /**
994     * Determine the number of operands used by an expression
995     */
996    static unsigned int get_num_operands(ir_expression_operation);
997
998    /**
999     * Determine the number of operands used by an expression
1000     */
1001    unsigned int get_num_operands() const
1002    {
1003       return (this->operation == ir_quadop_vector)
1004          ? this->type->vector_elements : get_num_operands(operation);
1005    }
1006
1007    /**
1008     * Return a string representing this expression's operator.
1009     */
1010    const char *operator_string();
1011
1012    /**
1013     * Return a string representing this expression's operator.
1014     */
1015    static const char *operator_string(ir_expression_operation);
1016
1017
1018    /**
1019     * Do a reverse-lookup to translate the given string into an operator.
1020     */
1021    static ir_expression_operation get_operator(const char *);
1022
1023    virtual void accept(ir_visitor *v)
1024    {
1025       v->visit(this);
1026    }
1027
1028    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1029
1030    ir_expression_operation operation;
1031    ir_rvalue *operands[4];
1032 };
1033
1034
1035 /**
1036  * HIR instruction representing a high-level function call, containing a list
1037  * of parameters and returning a value in the supplied temporary.
1038  */
1039 class ir_call : public ir_instruction {
1040 public:
1041    ir_call(ir_function_signature *callee,
1042            ir_dereference_variable *return_deref,
1043            exec_list *actual_parameters)
1044       : return_deref(return_deref), callee(callee)
1045    {
1046       ir_type = ir_type_call;
1047       assert(callee->return_type != NULL);
1048       actual_parameters->move_nodes_to(& this->actual_parameters);
1049       this->use_builtin = callee->is_builtin;
1050    }
1051
1052    virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const;
1053
1054    virtual ir_constant *constant_expression_value();
1055
1056    virtual ir_call *as_call()
1057    {
1058       return this;
1059    }
1060
1061    virtual void accept(ir_visitor *v)
1062    {
1063       v->visit(this);
1064    }
1065
1066    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1067
1068    /**
1069     * Get an iterator for the set of acutal parameters
1070     */
1071    exec_list_iterator iterator()
1072    {
1073       return actual_parameters.iterator();
1074    }
1075
1076    /**
1077     * Get the name of the function being called.
1078     */
1079    const char *callee_name() const
1080    {
1081       return callee->function_name();
1082    }
1083
1084    /**
1085     * Generates an inline version of the function before @ir,
1086     * storing the return value in return_deref.
1087     */
1088    void generate_inline(ir_instruction *ir);
1089
1090    /**
1091     * Storage for the function's return value.
1092     * This must be NULL if the return type is void.
1093     */
1094    ir_dereference_variable *return_deref;
1095
1096    /**
1097     * The specific function signature being called.
1098     */
1099    ir_function_signature *callee;
1100
1101    /* List of ir_rvalue of paramaters passed in this call. */
1102    exec_list actual_parameters;
1103
1104    /** Should this call only bind to a built-in function? */
1105    bool use_builtin;
1106 };
1107
1108
1109 /**
1110  * \name Jump-like IR instructions.
1111  *
1112  * These include \c break, \c continue, \c return, and \c discard.
1113  */
1114 /*@{*/
1115 class ir_jump : public ir_instruction {
1116 protected:
1117    ir_jump()
1118    {
1119       ir_type = ir_type_unset;
1120    }
1121 };
1122
1123 class ir_return : public ir_jump {
1124 public:
1125    ir_return()
1126       : value(NULL)
1127    {
1128       this->ir_type = ir_type_return;
1129    }
1130
1131    ir_return(ir_rvalue *value)
1132       : value(value)
1133    {
1134       this->ir_type = ir_type_return;
1135    }
1136
1137    virtual ir_return *clone(void *mem_ctx, struct hash_table *) const;
1138
1139    virtual ir_return *as_return()
1140    {
1141       return this;
1142    }
1143
1144    ir_rvalue *get_value() const
1145    {
1146       return value;
1147    }
1148
1149    virtual void accept(ir_visitor *v)
1150    {
1151       v->visit(this);
1152    }
1153
1154    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1155
1156    ir_rvalue *value;
1157 };
1158
1159
1160 /**
1161  * Jump instructions used inside loops
1162  *
1163  * These include \c break and \c continue.  The \c break within a loop is
1164  * different from the \c break within a switch-statement.
1165  *
1166  * \sa ir_switch_jump
1167  */
1168 class ir_loop_jump : public ir_jump {
1169 public:
1170    enum jump_mode {
1171       jump_break,
1172       jump_continue
1173    };
1174
1175    ir_loop_jump(jump_mode mode)
1176    {
1177       this->ir_type = ir_type_loop_jump;
1178       this->mode = mode;
1179       this->loop = loop;
1180    }
1181
1182    virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const;
1183
1184    virtual void accept(ir_visitor *v)
1185    {
1186       v->visit(this);
1187    }
1188
1189    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1190
1191    bool is_break() const
1192    {
1193       return mode == jump_break;
1194    }
1195
1196    bool is_continue() const
1197    {
1198       return mode == jump_continue;
1199    }
1200
1201    /** Mode selector for the jump instruction. */
1202    enum jump_mode mode;
1203 private:
1204    /** Loop containing this break instruction. */
1205    ir_loop *loop;
1206 };
1207
1208 /**
1209  * IR instruction representing discard statements.
1210  */
1211 class ir_discard : public ir_jump {
1212 public:
1213    ir_discard()
1214    {
1215       this->ir_type = ir_type_discard;
1216       this->condition = NULL;
1217    }
1218
1219    ir_discard(ir_rvalue *cond)
1220    {
1221       this->ir_type = ir_type_discard;
1222       this->condition = cond;
1223    }
1224
1225    virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const;
1226
1227    virtual void accept(ir_visitor *v)
1228    {
1229       v->visit(this);
1230    }
1231
1232    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1233
1234    virtual ir_discard *as_discard()
1235    {
1236       return this;
1237    }
1238
1239    ir_rvalue *condition;
1240 };
1241 /*@}*/
1242
1243
1244 /**
1245  * Texture sampling opcodes used in ir_texture
1246  */
1247 enum ir_texture_opcode {
1248    ir_tex,              /**< Regular texture look-up */
1249    ir_txb,              /**< Texture look-up with LOD bias */
1250    ir_txl,              /**< Texture look-up with explicit LOD */
1251    ir_txd,              /**< Texture look-up with partial derivatvies */
1252    ir_txf,              /**< Texel fetch with explicit LOD */
1253    ir_txs               /**< Texture size */
1254 };
1255
1256
1257 /**
1258  * IR instruction to sample a texture
1259  *
1260  * The specific form of the IR instruction depends on the \c mode value
1261  * selected from \c ir_texture_opcodes.  In the printed IR, these will
1262  * appear as:
1263  *
1264  *                                    Texel offset (0 or an expression)
1265  *                                    | Projection divisor
1266  *                                    | |  Shadow comparitor
1267  *                                    | |  |
1268  *                                    v v  v
1269  * (tex <type> <sampler> <coordinate> 0 1 ( ))
1270  * (txb <type> <sampler> <coordinate> 0 1 ( ) <bias>)
1271  * (txl <type> <sampler> <coordinate> 0 1 ( ) <lod>)
1272  * (txd <type> <sampler> <coordinate> 0 1 ( ) (dPdx dPdy))
1273  * (txf <type> <sampler> <coordinate> 0       <lod>)
1274  * (txs <type> <sampler> <lod>)
1275  */
1276 class ir_texture : public ir_rvalue {
1277 public:
1278    ir_texture(enum ir_texture_opcode op)
1279       : op(op), projector(NULL), shadow_comparitor(NULL), offset(NULL)
1280    {
1281       this->ir_type = ir_type_texture;
1282    }
1283
1284    virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const;
1285
1286    virtual ir_constant *constant_expression_value();
1287
1288    virtual void accept(ir_visitor *v)
1289    {
1290       v->visit(this);
1291    }
1292
1293    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1294
1295    /**
1296     * Return a string representing the ir_texture_opcode.
1297     */
1298    const char *opcode_string();
1299
1300    /** Set the sampler and type. */
1301    void set_sampler(ir_dereference *sampler, const glsl_type *type);
1302
1303    /**
1304     * Do a reverse-lookup to translate a string into an ir_texture_opcode.
1305     */
1306    static ir_texture_opcode get_opcode(const char *);
1307
1308    enum ir_texture_opcode op;
1309
1310    /** Sampler to use for the texture access. */
1311    ir_dereference *sampler;
1312
1313    /** Texture coordinate to sample */
1314    ir_rvalue *coordinate;
1315
1316    /**
1317     * Value used for projective divide.
1318     *
1319     * If there is no projective divide (the common case), this will be
1320     * \c NULL.  Optimization passes should check for this to point to a constant
1321     * of 1.0 and replace that with \c NULL.
1322     */
1323    ir_rvalue *projector;
1324
1325    /**
1326     * Coordinate used for comparison on shadow look-ups.
1327     *
1328     * If there is no shadow comparison, this will be \c NULL.  For the
1329     * \c ir_txf opcode, this *must* be \c NULL.
1330     */
1331    ir_rvalue *shadow_comparitor;
1332
1333    /** Texel offset. */
1334    ir_rvalue *offset;
1335
1336    union {
1337       ir_rvalue *lod;           /**< Floating point LOD */
1338       ir_rvalue *bias;          /**< Floating point LOD bias */
1339       struct {
1340          ir_rvalue *dPdx;       /**< Partial derivative of coordinate wrt X */
1341          ir_rvalue *dPdy;       /**< Partial derivative of coordinate wrt Y */
1342       } grad;
1343    } lod_info;
1344 };
1345
1346
1347 struct ir_swizzle_mask {
1348    unsigned x:2;
1349    unsigned y:2;
1350    unsigned z:2;
1351    unsigned w:2;
1352
1353    /**
1354     * Number of components in the swizzle.
1355     */
1356    unsigned num_components:3;
1357
1358    /**
1359     * Does the swizzle contain duplicate components?
1360     *
1361     * L-value swizzles cannot contain duplicate components.
1362     */
1363    unsigned has_duplicates:1;
1364 };
1365
1366
1367 class ir_swizzle : public ir_rvalue {
1368 public:
1369    ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w,
1370               unsigned count);
1371
1372    ir_swizzle(ir_rvalue *val, const unsigned *components, unsigned count);
1373
1374    ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask);
1375
1376    virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const;
1377
1378    virtual ir_constant *constant_expression_value();
1379
1380    virtual ir_swizzle *as_swizzle()
1381    {
1382       return this;
1383    }
1384
1385    /**
1386     * Construct an ir_swizzle from the textual representation.  Can fail.
1387     */
1388    static ir_swizzle *create(ir_rvalue *, const char *, unsigned vector_length);
1389
1390    virtual void accept(ir_visitor *v)
1391    {
1392       v->visit(this);
1393    }
1394
1395    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1396
1397    bool is_lvalue() const
1398    {
1399       return val->is_lvalue() && !mask.has_duplicates;
1400    }
1401
1402    /**
1403     * Get the variable that is ultimately referenced by an r-value
1404     */
1405    virtual ir_variable *variable_referenced() const;
1406
1407    ir_rvalue *val;
1408    ir_swizzle_mask mask;
1409
1410 private:
1411    /**
1412     * Initialize the mask component of a swizzle
1413     *
1414     * This is used by the \c ir_swizzle constructors.
1415     */
1416    void init_mask(const unsigned *components, unsigned count);
1417 };
1418
1419
1420 class ir_dereference : public ir_rvalue {
1421 public:
1422    virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0;
1423
1424    virtual ir_dereference *as_dereference()
1425    {
1426       return this;
1427    }
1428
1429    bool is_lvalue() const;
1430
1431    /**
1432     * Get the variable that is ultimately referenced by an r-value
1433     */
1434    virtual ir_variable *variable_referenced() const = 0;
1435 };
1436
1437
1438 class ir_dereference_variable : public ir_dereference {
1439 public:
1440    ir_dereference_variable(ir_variable *var);
1441
1442    virtual ir_dereference_variable *clone(void *mem_ctx,
1443                                           struct hash_table *) const;
1444
1445    virtual ir_constant *constant_expression_value();
1446
1447    virtual ir_dereference_variable *as_dereference_variable()
1448    {
1449       return this;
1450    }
1451
1452    /**
1453     * Get the variable that is ultimately referenced by an r-value
1454     */
1455    virtual ir_variable *variable_referenced() const
1456    {
1457       return this->var;
1458    }
1459
1460    virtual ir_variable *whole_variable_referenced()
1461    {
1462       /* ir_dereference_variable objects always dereference the entire
1463        * variable.  However, if this dereference is dereferenced by anything
1464        * else, the complete deferefernce chain is not a whole-variable
1465        * dereference.  This method should only be called on the top most
1466        * ir_rvalue in a dereference chain.
1467        */
1468       return this->var;
1469    }
1470
1471    virtual void accept(ir_visitor *v)
1472    {
1473       v->visit(this);
1474    }
1475
1476    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1477
1478    /**
1479     * Object being dereferenced.
1480     */
1481    ir_variable *var;
1482 };
1483
1484
1485 class ir_dereference_array : public ir_dereference {
1486 public:
1487    ir_dereference_array(ir_rvalue *value, ir_rvalue *array_index);
1488
1489    ir_dereference_array(ir_variable *var, ir_rvalue *array_index);
1490
1491    virtual ir_dereference_array *clone(void *mem_ctx,
1492                                        struct hash_table *) const;
1493
1494    virtual ir_constant *constant_expression_value();
1495
1496    virtual ir_dereference_array *as_dereference_array()
1497    {
1498       return this;
1499    }
1500
1501    /**
1502     * Get the variable that is ultimately referenced by an r-value
1503     */
1504    virtual ir_variable *variable_referenced() const
1505    {
1506       return this->array->variable_referenced();
1507    }
1508
1509    virtual void accept(ir_visitor *v)
1510    {
1511       v->visit(this);
1512    }
1513
1514    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1515
1516    ir_rvalue *array;
1517    ir_rvalue *array_index;
1518
1519 private:
1520    void set_array(ir_rvalue *value);
1521 };
1522
1523
1524 class ir_dereference_record : public ir_dereference {
1525 public:
1526    ir_dereference_record(ir_rvalue *value, const char *field);
1527
1528    ir_dereference_record(ir_variable *var, const char *field);
1529
1530    virtual ir_dereference_record *clone(void *mem_ctx,
1531                                         struct hash_table *) const;
1532
1533    virtual ir_constant *constant_expression_value();
1534
1535    /**
1536     * Get the variable that is ultimately referenced by an r-value
1537     */
1538    virtual ir_variable *variable_referenced() const
1539    {
1540       return this->record->variable_referenced();
1541    }
1542
1543    virtual void accept(ir_visitor *v)
1544    {
1545       v->visit(this);
1546    }
1547
1548    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1549
1550    ir_rvalue *record;
1551    const char *field;
1552 };
1553
1554
1555 /**
1556  * Data stored in an ir_constant
1557  */
1558 union ir_constant_data {
1559       unsigned u[16];
1560       int i[16];
1561       float f[16];
1562       bool b[16];
1563 };
1564
1565
1566 class ir_constant : public ir_rvalue {
1567 public:
1568    ir_constant(const struct glsl_type *type, const ir_constant_data *data);
1569    ir_constant(bool b);
1570    ir_constant(unsigned int u);
1571    ir_constant(int i);
1572    ir_constant(float f);
1573
1574    /**
1575     * Construct an ir_constant from a list of ir_constant values
1576     */
1577    ir_constant(const struct glsl_type *type, exec_list *values);
1578
1579    /**
1580     * Construct an ir_constant from a scalar component of another ir_constant
1581     *
1582     * The new \c ir_constant inherits the type of the component from the
1583     * source constant.
1584     *
1585     * \note
1586     * In the case of a matrix constant, the new constant is a scalar, \b not
1587     * a vector.
1588     */
1589    ir_constant(const ir_constant *c, unsigned i);
1590
1591    /**
1592     * Return a new ir_constant of the specified type containing all zeros.
1593     */
1594    static ir_constant *zero(void *mem_ctx, const glsl_type *type);
1595
1596    virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const;
1597
1598    virtual ir_constant *constant_expression_value();
1599
1600    virtual ir_constant *as_constant()
1601    {
1602       return this;
1603    }
1604
1605    virtual void accept(ir_visitor *v)
1606    {
1607       v->visit(this);
1608    }
1609
1610    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
1611
1612    /**
1613     * Get a particular component of a constant as a specific type
1614     *
1615     * This is useful, for example, to get a value from an integer constant
1616     * as a float or bool.  This appears frequently when constructors are
1617     * called with all constant parameters.
1618     */
1619    /*@{*/
1620    bool get_bool_component(unsigned i) const;
1621    float get_float_component(unsigned i) const;
1622    int get_int_component(unsigned i) const;
1623    unsigned get_uint_component(unsigned i) const;
1624    /*@}*/
1625
1626    ir_constant *get_array_element(unsigned i) const;
1627
1628    ir_constant *get_record_field(const char *name);
1629
1630    /**
1631     * Determine whether a constant has the same value as another constant
1632     *
1633     * \sa ir_constant::is_zero, ir_constant::is_one,
1634     * ir_constant::is_negative_one
1635     */
1636    bool has_value(const ir_constant *) const;
1637
1638    virtual bool is_zero() const;
1639    virtual bool is_one() const;
1640    virtual bool is_negative_one() const;
1641
1642    /**
1643     * Value of the constant.
1644     *
1645     * The field used to back the values supplied by the constant is determined
1646     * by the type associated with the \c ir_instruction.  Constants may be
1647     * scalars, vectors, or matrices.
1648     */
1649    union ir_constant_data value;
1650
1651    /* Array elements */
1652    ir_constant **array_elements;
1653
1654    /* Structure fields */
1655    exec_list components;
1656
1657 private:
1658    /**
1659     * Parameterless constructor only used by the clone method
1660     */
1661    ir_constant(void);
1662 };
1663
1664 /*@}*/
1665
1666 /**
1667  * Apply a visitor to each IR node in a list
1668  */
1669 void
1670 visit_exec_list(exec_list *list, ir_visitor *visitor);
1671
1672 /**
1673  * Validate invariants on each IR node in a list
1674  */
1675 void validate_ir_tree(exec_list *instructions);
1676
1677 struct _mesa_glsl_parse_state;
1678 struct gl_shader_program;
1679
1680 /**
1681  * Detect whether an unlinked shader contains static recursion
1682  *
1683  * If the list of instructions is determined to contain static recursion,
1684  * \c _mesa_glsl_error will be called to emit error messages for each function
1685  * that is in the recursion cycle.
1686  */
1687 void
1688 detect_recursion_unlinked(struct _mesa_glsl_parse_state *state,
1689                           exec_list *instructions);
1690
1691 /**
1692  * Detect whether a linked shader contains static recursion
1693  *
1694  * If the list of instructions is determined to contain static recursion,
1695  * \c link_error_printf will be called to emit error messages for each function
1696  * that is in the recursion cycle.  In addition,
1697  * \c gl_shader_program::LinkStatus will be set to false.
1698  */
1699 void
1700 detect_recursion_linked(struct gl_shader_program *prog,
1701                         exec_list *instructions);
1702
1703 /**
1704  * Make a clone of each IR instruction in a list
1705  *
1706  * \param in   List of IR instructions that are to be cloned
1707  * \param out  List to hold the cloned instructions
1708  */
1709 void
1710 clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in);
1711
1712 extern void
1713 _mesa_glsl_initialize_variables(exec_list *instructions,
1714                                 struct _mesa_glsl_parse_state *state);
1715
1716 extern void
1717 _mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state);
1718
1719 extern void
1720 _mesa_glsl_release_functions(void);
1721
1722 extern void
1723 reparent_ir(exec_list *list, void *mem_ctx);
1724
1725 struct glsl_symbol_table;
1726
1727 extern void
1728 import_prototypes(const exec_list *source, exec_list *dest,
1729                   struct glsl_symbol_table *symbols, void *mem_ctx);
1730
1731 extern bool
1732 ir_has_call(ir_instruction *ir);
1733
1734 extern void
1735 do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
1736                       bool is_fragment_shader);
1737
1738 extern char *
1739 prototype_string(const glsl_type *return_type, const char *name,
1740                  exec_list *parameters);
1741
1742 #endif /* IR_H */