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