Home | History | Annotate | Download | only in glsl
      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 "util/ralloc.h"
     33 #include "compiler/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 #ifdef __cplusplus
     40 
     41 /**
     42  * \defgroup IR Intermediate representation nodes
     43  *
     44  * @{
     45  */
     46 
     47 /**
     48  * Class tags
     49  *
     50  * Each concrete class derived from \c ir_instruction has a value in this
     51  * enumerant.  The value for the type is stored in \c ir_instruction::ir_type
     52  * by the constructor.  While using type tags is not very C++, it is extremely
     53  * convenient.  For example, during debugging you can simply inspect
     54  * \c ir_instruction::ir_type to find out the actual type of the object.
     55  *
     56  * In addition, it is possible to use a switch-statement based on \c
     57  * \c ir_instruction::ir_type to select different behavior for different object
     58  * types.  For functions that have only slight differences for several object
     59  * types, this allows writing very straightforward, readable code.
     60  */
     61 enum ir_node_type {
     62    ir_type_dereference_array,
     63    ir_type_dereference_record,
     64    ir_type_dereference_variable,
     65    ir_type_constant,
     66    ir_type_expression,
     67    ir_type_swizzle,
     68    ir_type_texture,
     69    ir_type_variable,
     70    ir_type_assignment,
     71    ir_type_call,
     72    ir_type_function,
     73    ir_type_function_signature,
     74    ir_type_if,
     75    ir_type_loop,
     76    ir_type_loop_jump,
     77    ir_type_return,
     78    ir_type_discard,
     79    ir_type_emit_vertex,
     80    ir_type_end_primitive,
     81    ir_type_barrier,
     82    ir_type_max, /**< maximum ir_type enum number, for validation */
     83    ir_type_unset = ir_type_max
     84 };
     85 
     86 
     87 /**
     88  * Base class of all IR instructions
     89  */
     90 class ir_instruction : public exec_node {
     91 public:
     92    enum ir_node_type ir_type;
     93 
     94    /**
     95     * GCC 4.7+ and clang warn when deleting an ir_instruction unless
     96     * there's a virtual destructor present.  Because we almost
     97     * universally use ralloc for our memory management of
     98     * ir_instructions, the destructor doesn't need to do any work.
     99     */
    100    virtual ~ir_instruction()
    101    {
    102    }
    103 
    104    /** ir_print_visitor helper for debugging. */
    105    void print(void) const;
    106    void fprint(FILE *f) const;
    107 
    108    virtual void accept(ir_visitor *) = 0;
    109    virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
    110    virtual ir_instruction *clone(void *mem_ctx,
    111 				 struct hash_table *ht) const = 0;
    112 
    113    bool is_rvalue() const
    114    {
    115       return ir_type == ir_type_dereference_array ||
    116              ir_type == ir_type_dereference_record ||
    117              ir_type == ir_type_dereference_variable ||
    118              ir_type == ir_type_constant ||
    119              ir_type == ir_type_expression ||
    120              ir_type == ir_type_swizzle ||
    121              ir_type == ir_type_texture;
    122    }
    123 
    124    bool is_dereference() const
    125    {
    126       return ir_type == ir_type_dereference_array ||
    127              ir_type == ir_type_dereference_record ||
    128              ir_type == ir_type_dereference_variable;
    129    }
    130 
    131    bool is_jump() const
    132    {
    133       return ir_type == ir_type_loop_jump ||
    134              ir_type == ir_type_return ||
    135              ir_type == ir_type_discard;
    136    }
    137 
    138    /**
    139     * \name IR instruction downcast functions
    140     *
    141     * These functions either cast the object to a derived class or return
    142     * \c NULL if the object's type does not match the specified derived class.
    143     * Additional downcast functions will be added as needed.
    144     */
    145    /*@{*/
    146    #define AS_BASE(TYPE)                                \
    147    class ir_##TYPE *as_##TYPE()                         \
    148    {                                                    \
    149       assume(this != NULL);                             \
    150       return is_##TYPE() ? (ir_##TYPE *) this : NULL;   \
    151    }                                                    \
    152    const class ir_##TYPE *as_##TYPE() const             \
    153    {                                                    \
    154       assume(this != NULL);                             \
    155       return is_##TYPE() ? (ir_##TYPE *) this : NULL;   \
    156    }
    157 
    158    AS_BASE(rvalue)
    159    AS_BASE(dereference)
    160    AS_BASE(jump)
    161    #undef AS_BASE
    162 
    163    #define AS_CHILD(TYPE) \
    164    class ir_##TYPE * as_##TYPE() \
    165    { \
    166       assume(this != NULL);                                         \
    167       return ir_type == ir_type_##TYPE ? (ir_##TYPE *) this : NULL; \
    168    }                                                                      \
    169    const class ir_##TYPE * as_##TYPE() const                              \
    170    {                                                                      \
    171       assume(this != NULL);                                               \
    172       return ir_type == ir_type_##TYPE ? (const ir_##TYPE *) this : NULL; \
    173    }
    174    AS_CHILD(variable)
    175    AS_CHILD(function)
    176    AS_CHILD(dereference_array)
    177    AS_CHILD(dereference_variable)
    178    AS_CHILD(dereference_record)
    179    AS_CHILD(expression)
    180    AS_CHILD(loop)
    181    AS_CHILD(assignment)
    182    AS_CHILD(call)
    183    AS_CHILD(return)
    184    AS_CHILD(if)
    185    AS_CHILD(swizzle)
    186    AS_CHILD(texture)
    187    AS_CHILD(constant)
    188    AS_CHILD(discard)
    189    #undef AS_CHILD
    190    /*@}*/
    191 
    192    /**
    193     * IR equality method: Return true if the referenced instruction would
    194     * return the same value as this one.
    195     *
    196     * This intended to be used for CSE and algebraic optimizations, on rvalues
    197     * in particular.  No support for other instruction types (assignments,
    198     * jumps, calls, etc.) is planned.
    199     */
    200    virtual bool equals(const ir_instruction *ir,
    201                        enum ir_node_type ignore = ir_type_unset) const;
    202 
    203 protected:
    204    ir_instruction(enum ir_node_type t)
    205       : ir_type(t)
    206    {
    207    }
    208 
    209 private:
    210    ir_instruction()
    211    {
    212       assert(!"Should not get here.");
    213    }
    214 };
    215 
    216 
    217 /**
    218  * The base class for all "values"/expression trees.
    219  */
    220 class ir_rvalue : public ir_instruction {
    221 public:
    222    const struct glsl_type *type;
    223 
    224    virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const;
    225 
    226    virtual void accept(ir_visitor *v)
    227    {
    228       v->visit(this);
    229    }
    230 
    231    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
    232 
    233    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
    234 
    235    ir_rvalue *as_rvalue_to_saturate();
    236 
    237    virtual bool is_lvalue() const
    238    {
    239       return false;
    240    }
    241 
    242    /**
    243     * Get the variable that is ultimately referenced by an r-value
    244     */
    245    virtual ir_variable *variable_referenced() const
    246    {
    247       return NULL;
    248    }
    249 
    250 
    251    /**
    252     * If an r-value is a reference to a whole variable, get that variable
    253     *
    254     * \return
    255     * Pointer to a variable that is completely dereferenced by the r-value.  If
    256     * the r-value is not a dereference or the dereference does not access the
    257     * entire variable (i.e., it's just one array element, struct field), \c NULL
    258     * is returned.
    259     */
    260    virtual ir_variable *whole_variable_referenced()
    261    {
    262       return NULL;
    263    }
    264 
    265    /**
    266     * Determine if an r-value has the value zero
    267     *
    268     * The base implementation of this function always returns \c false.  The
    269     * \c ir_constant class over-rides this function to return \c true \b only
    270     * for vector and scalar types that have all elements set to the value
    271     * zero (or \c false for booleans).
    272     *
    273     * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
    274     */
    275    virtual bool is_zero() const;
    276 
    277    /**
    278     * Determine if an r-value has the value one
    279     *
    280     * The base implementation of this function always returns \c false.  The
    281     * \c ir_constant class over-rides this function to return \c true \b only
    282     * for vector and scalar types that have all elements set to the value
    283     * one (or \c true for booleans).
    284     *
    285     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
    286     */
    287    virtual bool is_one() const;
    288 
    289    /**
    290     * Determine if an r-value has the value negative one
    291     *
    292     * The base implementation of this function always returns \c false.  The
    293     * \c ir_constant class over-rides this function to return \c true \b only
    294     * for vector and scalar types that have all elements set to the value
    295     * negative one.  For boolean types, the result is always \c false.
    296     *
    297     * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
    298     */
    299    virtual bool is_negative_one() const;
    300 
    301    /**
    302     * Determine if an r-value is an unsigned integer constant which can be
    303     * stored in 16 bits.
    304     *
    305     * \sa ir_constant::is_uint16_constant.
    306     */
    307    virtual bool is_uint16_constant() const { return false; }
    308 
    309    /**
    310     * Return a generic value of error_type.
    311     *
    312     * Allocation will be performed with 'mem_ctx' as ralloc owner.
    313     */
    314    static ir_rvalue *error_value(void *mem_ctx);
    315 
    316 protected:
    317    ir_rvalue(enum ir_node_type t);
    318 };
    319 
    320 
    321 /**
    322  * Variable storage classes
    323  */
    324 enum ir_variable_mode {
    325    ir_var_auto = 0,             /**< Function local variables and globals. */
    326    ir_var_uniform,              /**< Variable declared as a uniform. */
    327    ir_var_shader_storage,       /**< Variable declared as an ssbo. */
    328    ir_var_shader_shared,        /**< Variable declared as shared. */
    329    ir_var_shader_in,
    330    ir_var_shader_out,
    331    ir_var_function_in,
    332    ir_var_function_out,
    333    ir_var_function_inout,
    334    ir_var_const_in,             /**< "in" param that must be a constant expression */
    335    ir_var_system_value,         /**< Ex: front-face, instance-id, etc. */
    336    ir_var_temporary,            /**< Temporary variable generated during compilation. */
    337    ir_var_mode_count            /**< Number of variable modes */
    338 };
    339 
    340 /**
    341  * Enum keeping track of how a variable was declared.  For error checking of
    342  * the gl_PerVertex redeclaration rules.
    343  */
    344 enum ir_var_declaration_type {
    345    /**
    346     * Normal declaration (for most variables, this means an explicit
    347     * declaration.  Exception: temporaries are always implicitly declared, but
    348     * they still use ir_var_declared_normally).
    349     *
    350     * Note: an ir_variable that represents a named interface block uses
    351     * ir_var_declared_normally.
    352     */
    353    ir_var_declared_normally = 0,
    354 
    355    /**
    356     * Variable was explicitly declared (or re-declared) in an unnamed
    357     * interface block.
    358     */
    359    ir_var_declared_in_block,
    360 
    361    /**
    362     * Variable is an implicitly declared built-in that has not been explicitly
    363     * re-declared by the shader.
    364     */
    365    ir_var_declared_implicitly,
    366 
    367    /**
    368     * Variable is implicitly generated by the compiler and should not be
    369     * visible via the API.
    370     */
    371    ir_var_hidden,
    372 };
    373 
    374 /**
    375  * \brief Layout qualifiers for gl_FragDepth.
    376  *
    377  * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared
    378  * with a layout qualifier.
    379  */
    380 enum ir_depth_layout {
    381     ir_depth_layout_none, /**< No depth layout is specified. */
    382     ir_depth_layout_any,
    383     ir_depth_layout_greater,
    384     ir_depth_layout_less,
    385     ir_depth_layout_unchanged
    386 };
    387 
    388 /**
    389  * \brief Convert depth layout qualifier to string.
    390  */
    391 const char*
    392 depth_layout_string(ir_depth_layout layout);
    393 
    394 /**
    395  * Description of built-in state associated with a uniform
    396  *
    397  * \sa ir_variable::state_slots
    398  */
    399 struct ir_state_slot {
    400    int tokens[5];
    401    int swizzle;
    402 };
    403 
    404 
    405 /**
    406  * Get the string value for an interpolation qualifier
    407  *
    408  * \return The string that would be used in a shader to specify \c
    409  * mode will be returned.
    410  *
    411  * This function is used to generate error messages of the form "shader
    412  * uses %s interpolation qualifier", so in the case where there is no
    413  * interpolation qualifier, it returns "no".
    414  *
    415  * This function should only be used on a shader input or output variable.
    416  */
    417 const char *interpolation_string(unsigned interpolation);
    418 
    419 
    420 class ir_variable : public ir_instruction {
    421 public:
    422    ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
    423 
    424    virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const;
    425 
    426    virtual void accept(ir_visitor *v)
    427    {
    428       v->visit(this);
    429    }
    430 
    431    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
    432 
    433 
    434    /**
    435     * Determine whether or not a variable is part of a uniform or
    436     * shader storage block.
    437     */
    438    inline bool is_in_buffer_block() const
    439    {
    440       return (this->data.mode == ir_var_uniform ||
    441               this->data.mode == ir_var_shader_storage) &&
    442              this->interface_type != NULL;
    443    }
    444 
    445    /**
    446     * Determine whether or not a variable is part of a shader storage block.
    447     */
    448    inline bool is_in_shader_storage_block() const
    449    {
    450       return this->data.mode == ir_var_shader_storage &&
    451              this->interface_type != NULL;
    452    }
    453 
    454    /**
    455     * Determine whether or not a variable is the declaration of an interface
    456     * block
    457     *
    458     * For the first declaration below, there will be an \c ir_variable named
    459     * "instance" whose type and whose instance_type will be the same
    460     *  \cglsl_type.  For the second declaration, there will be an \c ir_variable
    461     * named "f" whose type is float and whose instance_type is B2.
    462     *
    463     * "instance" is an interface instance variable, but "f" is not.
    464     *
    465     * uniform B1 {
    466     *     float f;
    467     * } instance;
    468     *
    469     * uniform B2 {
    470     *     float f;
    471     * };
    472     */
    473    inline bool is_interface_instance() const
    474    {
    475       return this->type->without_array() == this->interface_type;
    476    }
    477 
    478    /**
    479     * Set this->interface_type on a newly created variable.
    480     */
    481    void init_interface_type(const struct glsl_type *type)
    482    {
    483       assert(this->interface_type == NULL);
    484       this->interface_type = type;
    485       if (this->is_interface_instance()) {
    486          this->u.max_ifc_array_access =
    487             ralloc_array(this, int, type->length);
    488          for (unsigned i = 0; i < type->length; i++) {
    489             this->u.max_ifc_array_access[i] = -1;
    490          }
    491       }
    492    }
    493 
    494    /**
    495     * Change this->interface_type on a variable that previously had a
    496     * different, but compatible, interface_type.  This is used during linking
    497     * to set the size of arrays in interface blocks.
    498     */
    499    void change_interface_type(const struct glsl_type *type)
    500    {
    501       if (this->u.max_ifc_array_access != NULL) {
    502          /* max_ifc_array_access has already been allocated, so make sure the
    503           * new interface has the same number of fields as the old one.
    504           */
    505          assert(this->interface_type->length == type->length);
    506       }
    507       this->interface_type = type;
    508    }
    509 
    510    /**
    511     * Change this->interface_type on a variable that previously had a
    512     * different, and incompatible, interface_type. This is used during
    513     * compilation to handle redeclaration of the built-in gl_PerVertex
    514     * interface block.
    515     */
    516    void reinit_interface_type(const struct glsl_type *type)
    517    {
    518       if (this->u.max_ifc_array_access != NULL) {
    519 #ifndef NDEBUG
    520          /* Redeclaring gl_PerVertex is only allowed if none of the built-ins
    521           * it defines have been accessed yet; so it's safe to throw away the
    522           * old max_ifc_array_access pointer, since all of its values are
    523           * zero.
    524           */
    525          for (unsigned i = 0; i < this->interface_type->length; i++)
    526             assert(this->u.max_ifc_array_access[i] == -1);
    527 #endif
    528          ralloc_free(this->u.max_ifc_array_access);
    529          this->u.max_ifc_array_access = NULL;
    530       }
    531       this->interface_type = NULL;
    532       init_interface_type(type);
    533    }
    534 
    535    const glsl_type *get_interface_type() const
    536    {
    537       return this->interface_type;
    538    }
    539 
    540    enum glsl_interface_packing get_interface_type_packing() const
    541    {
    542      return this->interface_type->get_interface_packing();
    543    }
    544    /**
    545     * Get the max_ifc_array_access pointer
    546     *
    547     * A "set" function is not needed because the array is dynmically allocated
    548     * as necessary.
    549     */
    550    inline int *get_max_ifc_array_access()
    551    {
    552       assert(this->data._num_state_slots == 0);
    553       return this->u.max_ifc_array_access;
    554    }
    555 
    556    inline unsigned get_num_state_slots() const
    557    {
    558       assert(!this->is_interface_instance()
    559              || this->data._num_state_slots == 0);
    560       return this->data._num_state_slots;
    561    }
    562 
    563    inline void set_num_state_slots(unsigned n)
    564    {
    565       assert(!this->is_interface_instance()
    566              || n == 0);
    567       this->data._num_state_slots = n;
    568    }
    569 
    570    inline ir_state_slot *get_state_slots()
    571    {
    572       return this->is_interface_instance() ? NULL : this->u.state_slots;
    573    }
    574 
    575    inline const ir_state_slot *get_state_slots() const
    576    {
    577       return this->is_interface_instance() ? NULL : this->u.state_slots;
    578    }
    579 
    580    inline ir_state_slot *allocate_state_slots(unsigned n)
    581    {
    582       assert(!this->is_interface_instance());
    583 
    584       this->u.state_slots = ralloc_array(this, ir_state_slot, n);
    585       this->data._num_state_slots = 0;
    586 
    587       if (this->u.state_slots != NULL)
    588          this->data._num_state_slots = n;
    589 
    590       return this->u.state_slots;
    591    }
    592 
    593    inline bool is_interpolation_flat() const
    594    {
    595       return this->data.interpolation == INTERP_MODE_FLAT ||
    596              this->type->contains_integer() ||
    597              this->type->contains_double();
    598    }
    599 
    600    inline bool is_name_ralloced() const
    601    {
    602       return this->name != ir_variable::tmp_name &&
    603              this->name != this->name_storage;
    604    }
    605 
    606    /**
    607     * Enable emitting extension warnings for this variable
    608     */
    609    void enable_extension_warning(const char *extension);
    610 
    611    /**
    612     * Get the extension warning string for this variable
    613     *
    614     * If warnings are not enabled, \c NULL is returned.
    615     */
    616    const char *get_extension_warning() const;
    617 
    618    /**
    619     * Declared type of the variable
    620     */
    621    const struct glsl_type *type;
    622 
    623    /**
    624     * Declared name of the variable
    625     */
    626    const char *name;
    627 
    628 private:
    629    /**
    630     * If the name length fits into name_storage, it's used, otherwise
    631     * the name is ralloc'd. shader-db mining showed that 70% of variables
    632     * fit here. This is a win over ralloc where only ralloc_header has
    633     * 20 bytes on 64-bit (28 bytes with DEBUG), and we can also skip malloc.
    634     */
    635    char name_storage[16];
    636 
    637 public:
    638    struct ir_variable_data {
    639 
    640       /**
    641        * Is the variable read-only?
    642        *
    643        * This is set for variables declared as \c const, shader inputs,
    644        * and uniforms.
    645        */
    646       unsigned read_only:1;
    647       unsigned centroid:1;
    648       unsigned sample:1;
    649       unsigned patch:1;
    650       unsigned invariant:1;
    651       unsigned precise:1;
    652 
    653       /**
    654        * Has this variable been used for reading or writing?
    655        *
    656        * Several GLSL semantic checks require knowledge of whether or not a
    657        * variable has been used.  For example, it is an error to redeclare a
    658        * variable as invariant after it has been used.
    659        *
    660        * This is only maintained in the ast_to_hir.cpp path, not in
    661        * Mesa's fixed function or ARB program paths.
    662        */
    663       unsigned used:1;
    664 
    665       /**
    666        * Has this variable been statically assigned?
    667        *
    668        * This answers whether the variable was assigned in any path of
    669        * the shader during ast_to_hir.  This doesn't answer whether it is
    670        * still written after dead code removal, nor is it maintained in
    671        * non-ast_to_hir.cpp (GLSL parsing) paths.
    672        */
    673       unsigned assigned:1;
    674 
    675       /**
    676        * When separate shader programs are enabled, only input/outputs between
    677        * the stages of a multi-stage separate program can be safely removed
    678        * from the shader interface. Other input/outputs must remains active.
    679        */
    680       unsigned always_active_io:1;
    681 
    682       /**
    683        * Enum indicating how the variable was declared.  See
    684        * ir_var_declaration_type.
    685        *
    686        * This is used to detect certain kinds of illegal variable redeclarations.
    687        */
    688       unsigned how_declared:2;
    689 
    690       /**
    691        * Storage class of the variable.
    692        *
    693        * \sa ir_variable_mode
    694        */
    695       unsigned mode:4;
    696 
    697       /**
    698        * Interpolation mode for shader inputs / outputs
    699        *
    700        * \sa glsl_interp_mode
    701        */
    702       unsigned interpolation:2;
    703 
    704       /**
    705        * \name ARB_fragment_coord_conventions
    706        * @{
    707        */
    708       unsigned origin_upper_left:1;
    709       unsigned pixel_center_integer:1;
    710       /*@}*/
    711 
    712       /**
    713        * Was the location explicitly set in the shader?
    714        *
    715        * If the location is explicitly set in the shader, it \b cannot be changed
    716        * by the linker or by the API (e.g., calls to \c glBindAttribLocation have
    717        * no effect).
    718        */
    719       unsigned explicit_location:1;
    720       unsigned explicit_index:1;
    721 
    722       /**
    723        * Was an initial binding explicitly set in the shader?
    724        *
    725        * If so, constant_value contains an integer ir_constant representing the
    726        * initial binding point.
    727        */
    728       unsigned explicit_binding:1;
    729 
    730       /**
    731        * Was an initial component explicitly set in the shader?
    732        */
    733       unsigned explicit_component:1;
    734 
    735       /**
    736        * Does this variable have an initializer?
    737        *
    738        * This is used by the linker to cross-validiate initializers of global
    739        * variables.
    740        */
    741       unsigned has_initializer:1;
    742 
    743       /**
    744        * Is this variable a generic output or input that has not yet been matched
    745        * up to a variable in another stage of the pipeline?
    746        *
    747        * This is used by the linker as scratch storage while assigning locations
    748        * to generic inputs and outputs.
    749        */
    750       unsigned is_unmatched_generic_inout:1;
    751 
    752       /**
    753        * Is this varying used only by transform feedback?
    754        *
    755        * This is used by the linker to decide if its safe to pack the varying.
    756        */
    757       unsigned is_xfb_only:1;
    758 
    759       /**
    760        * Was a transfor feedback buffer set in the shader?
    761        */
    762       unsigned explicit_xfb_buffer:1;
    763 
    764       /**
    765        * Was a transfor feedback offset set in the shader?
    766        */
    767       unsigned explicit_xfb_offset:1;
    768 
    769       /**
    770        * Was a transfor feedback stride set in the shader?
    771        */
    772       unsigned explicit_xfb_stride:1;
    773 
    774       /**
    775        * If non-zero, then this variable may be packed along with other variables
    776        * into a single varying slot, so this offset should be applied when
    777        * accessing components.  For example, an offset of 1 means that the x
    778        * component of this variable is actually stored in component y of the
    779        * location specified by \c location.
    780        */
    781       unsigned location_frac:2;
    782 
    783       /**
    784        * Layout of the matrix.  Uses glsl_matrix_layout values.
    785        */
    786       unsigned matrix_layout:2;
    787 
    788       /**
    789        * Non-zero if this variable was created by lowering a named interface
    790        * block.
    791        */
    792       unsigned from_named_ifc_block:1;
    793 
    794       /**
    795        * Non-zero if the variable must be a shader input. This is useful for
    796        * constraints on function parameters.
    797        */
    798       unsigned must_be_shader_input:1;
    799 
    800       /**
    801        * Output index for dual source blending.
    802        *
    803        * \note
    804        * The GLSL spec only allows the values 0 or 1 for the index in \b dual
    805        * source blending.
    806        */
    807       unsigned index:1;
    808 
    809       /**
    810        * Precision qualifier.
    811        *
    812        * In desktop GLSL we do not care about precision qualifiers at all, in
    813        * fact, the spec says that precision qualifiers are ignored.
    814        *
    815        * To make things easy, we make it so that this field is always
    816        * GLSL_PRECISION_NONE on desktop shaders. This way all the variables
    817        * have the same precision value and the checks we add in the compiler
    818        * for this field will never break a desktop shader compile.
    819        */
    820       unsigned precision:2;
    821 
    822       /**
    823        * \brief Layout qualifier for gl_FragDepth.
    824        *
    825        * This is not equal to \c ir_depth_layout_none if and only if this
    826        * variable is \c gl_FragDepth and a layout qualifier is specified.
    827        */
    828       ir_depth_layout depth_layout:3;
    829 
    830       /**
    831        * ARB_shader_image_load_store qualifiers.
    832        */
    833       unsigned image_read_only:1; /**< "readonly" qualifier. */
    834       unsigned image_write_only:1; /**< "writeonly" qualifier. */
    835       unsigned image_coherent:1;
    836       unsigned image_volatile:1;
    837       unsigned image_restrict:1;
    838 
    839       /**
    840        * ARB_shader_storage_buffer_object
    841        */
    842       unsigned from_ssbo_unsized_array:1; /**< unsized array buffer variable. */
    843 
    844       unsigned implicit_sized_array:1;
    845 
    846       /**
    847        * Is this a non-patch TCS output / TES input array that was implicitly
    848        * sized to gl_MaxPatchVertices?
    849        */
    850       unsigned tess_varying_implicit_sized_array:1;
    851 
    852       /**
    853        * Whether this is a fragment shader output implicitly initialized with
    854        * the previous contents of the specified render target at the
    855        * framebuffer location corresponding to this shader invocation.
    856        */
    857       unsigned fb_fetch_output:1;
    858 
    859       /**
    860        * Emit a warning if this variable is accessed.
    861        */
    862    private:
    863       uint8_t warn_extension_index;
    864 
    865    public:
    866       /** Image internal format if specified explicitly, otherwise GL_NONE. */
    867       uint16_t image_format;
    868 
    869    private:
    870       /**
    871        * Number of state slots used
    872        *
    873        * \note
    874        * This could be stored in as few as 7-bits, if necessary.  If it is made
    875        * smaller, add an assertion to \c ir_variable::allocate_state_slots to
    876        * be safe.
    877        */
    878       uint16_t _num_state_slots;
    879 
    880    public:
    881       /**
    882        * Initial binding point for a sampler, atomic, or UBO.
    883        *
    884        * For array types, this represents the binding point for the first element.
    885        */
    886       int16_t binding;
    887 
    888       /**
    889        * Storage location of the base of this variable
    890        *
    891        * The precise meaning of this field depends on the nature of the variable.
    892        *
    893        *   - Vertex shader input: one of the values from \c gl_vert_attrib.
    894        *   - Vertex shader output: one of the values from \c gl_varying_slot.
    895        *   - Geometry shader input: one of the values from \c gl_varying_slot.
    896        *   - Geometry shader output: one of the values from \c gl_varying_slot.
    897        *   - Fragment shader input: one of the values from \c gl_varying_slot.
    898        *   - Fragment shader output: one of the values from \c gl_frag_result.
    899        *   - Uniforms: Per-stage uniform slot number for default uniform block.
    900        *   - Uniforms: Index within the uniform block definition for UBO members.
    901        *   - Non-UBO Uniforms: explicit location until linking then reused to
    902        *     store uniform slot number.
    903        *   - Other: This field is not currently used.
    904        *
    905        * If the variable is a uniform, shader input, or shader output, and the
    906        * slot has not been assigned, the value will be -1.
    907        */
    908       int location;
    909 
    910       /**
    911        * for glsl->tgsi/mesa IR we need to store the index into the
    912        * parameters for uniforms, initially the code overloaded location
    913        * but this causes problems with indirect samplers and AoA.
    914        * This is assigned in _mesa_generate_parameters_list_for_uniforms.
    915        */
    916       int param_index;
    917 
    918       /**
    919        * Vertex stream output identifier.
    920        *
    921        * For packed outputs, bit 31 is set and bits [2*i+1,2*i] indicate the
    922        * stream of the i-th component.
    923        */
    924       unsigned stream;
    925 
    926       /**
    927        * Atomic, transform feedback or block member offset.
    928        */
    929       unsigned offset;
    930 
    931       /**
    932        * Highest element accessed with a constant expression array index
    933        *
    934        * Not used for non-array variables. -1 is never accessed.
    935        */
    936       int max_array_access;
    937 
    938       /**
    939        * Transform feedback buffer.
    940        */
    941       unsigned xfb_buffer;
    942 
    943       /**
    944        * Transform feedback stride.
    945        */
    946       unsigned xfb_stride;
    947 
    948       /**
    949        * Allow (only) ir_variable direct access private members.
    950        */
    951       friend class ir_variable;
    952    } data;
    953 
    954    /**
    955     * Value assigned in the initializer of a variable declared "const"
    956     */
    957    ir_constant *constant_value;
    958 
    959    /**
    960     * Constant expression assigned in the initializer of the variable
    961     *
    962     * \warning
    963     * This field and \c ::constant_value are distinct.  Even if the two fields
    964     * refer to constants with the same value, they must point to separate
    965     * objects.
    966     */
    967    ir_constant *constant_initializer;
    968 
    969 private:
    970    static const char *const warn_extension_table[];
    971 
    972    union {
    973       /**
    974        * For variables which satisfy the is_interface_instance() predicate,
    975        * this points to an array of integers such that if the ith member of
    976        * the interface block is an array, max_ifc_array_access[i] is the
    977        * maximum array element of that member that has been accessed.  If the
    978        * ith member of the interface block is not an array,
    979        * max_ifc_array_access[i] is unused.
    980        *
    981        * For variables whose type is not an interface block, this pointer is
    982        * NULL.
    983        */
    984       int *max_ifc_array_access;
    985 
    986       /**
    987        * Built-in state that backs this uniform
    988        *
    989        * Once set at variable creation, \c state_slots must remain invariant.
    990        *
    991        * If the variable is not a uniform, \c _num_state_slots will be zero
    992        * and \c state_slots will be \c NULL.
    993        */
    994       ir_state_slot *state_slots;
    995    } u;
    996 
    997    /**
    998     * For variables that are in an interface block or are an instance of an
    999     * interface block, this is the \c GLSL_TYPE_INTERFACE type for that block.
   1000     *
   1001     * \sa ir_variable::location
   1002     */
   1003    const glsl_type *interface_type;
   1004 
   1005    /**
   1006     * Name used for anonymous compiler temporaries
   1007     */
   1008    static const char tmp_name[];
   1009 
   1010 public:
   1011    /**
   1012     * Should the construct keep names for ir_var_temporary variables?
   1013     *
   1014     * When this global is false, names passed to the constructor for
   1015     * \c ir_var_temporary variables will be dropped.  Instead, the variable will
   1016     * be named "compiler_temp".  This name will be in static storage.
   1017     *
   1018     * \warning
   1019     * \b NEVER change the mode of an \c ir_var_temporary.
   1020     *
   1021     * \warning
   1022     * This variable is \b not thread-safe.  It is global, \b not
   1023     * per-context. It begins life false.  A context can, at some point, make
   1024     * it true.  From that point on, it will be true forever.  This should be
   1025     * okay since it will only be set true while debugging.
   1026     */
   1027    static bool temporaries_allocate_names;
   1028 };
   1029 
   1030 /**
   1031  * A function that returns whether a built-in function is available in the
   1032  * current shading language (based on version, ES or desktop, and extensions).
   1033  */
   1034 typedef bool (*builtin_available_predicate)(const _mesa_glsl_parse_state *);
   1035 
   1036 #define MAKE_INTRINSIC_FOR_TYPE(op, t) \
   1037    ir_intrinsic_generic_ ## op - ir_intrinsic_generic_load + ir_intrinsic_ ## t ## _ ## load
   1038 
   1039 #define MAP_INTRINSIC_TO_TYPE(i, t) \
   1040    ir_intrinsic_id(int(i) - int(ir_intrinsic_generic_load) + int(ir_intrinsic_ ## t ## _ ## load))
   1041 
   1042 enum ir_intrinsic_id {
   1043    ir_intrinsic_invalid = 0,
   1044 
   1045    /**
   1046     * \name Generic intrinsics
   1047     *
   1048     * Each of these intrinsics has a specific version for shared variables and
   1049     * SSBOs.
   1050     */
   1051    /*@{*/
   1052    ir_intrinsic_generic_load,
   1053    ir_intrinsic_generic_store,
   1054    ir_intrinsic_generic_atomic_add,
   1055    ir_intrinsic_generic_atomic_and,
   1056    ir_intrinsic_generic_atomic_or,
   1057    ir_intrinsic_generic_atomic_xor,
   1058    ir_intrinsic_generic_atomic_min,
   1059    ir_intrinsic_generic_atomic_max,
   1060    ir_intrinsic_generic_atomic_exchange,
   1061    ir_intrinsic_generic_atomic_comp_swap,
   1062    /*@}*/
   1063 
   1064    ir_intrinsic_atomic_counter_read,
   1065    ir_intrinsic_atomic_counter_increment,
   1066    ir_intrinsic_atomic_counter_predecrement,
   1067    ir_intrinsic_atomic_counter_add,
   1068    ir_intrinsic_atomic_counter_and,
   1069    ir_intrinsic_atomic_counter_or,
   1070    ir_intrinsic_atomic_counter_xor,
   1071    ir_intrinsic_atomic_counter_min,
   1072    ir_intrinsic_atomic_counter_max,
   1073    ir_intrinsic_atomic_counter_exchange,
   1074    ir_intrinsic_atomic_counter_comp_swap,
   1075 
   1076    ir_intrinsic_image_load,
   1077    ir_intrinsic_image_store,
   1078    ir_intrinsic_image_atomic_add,
   1079    ir_intrinsic_image_atomic_and,
   1080    ir_intrinsic_image_atomic_or,
   1081    ir_intrinsic_image_atomic_xor,
   1082    ir_intrinsic_image_atomic_min,
   1083    ir_intrinsic_image_atomic_max,
   1084    ir_intrinsic_image_atomic_exchange,
   1085    ir_intrinsic_image_atomic_comp_swap,
   1086    ir_intrinsic_image_size,
   1087    ir_intrinsic_image_samples,
   1088 
   1089    ir_intrinsic_ssbo_load,
   1090    ir_intrinsic_ssbo_store = MAKE_INTRINSIC_FOR_TYPE(store, ssbo),
   1091    ir_intrinsic_ssbo_atomic_add = MAKE_INTRINSIC_FOR_TYPE(atomic_add, ssbo),
   1092    ir_intrinsic_ssbo_atomic_and = MAKE_INTRINSIC_FOR_TYPE(atomic_and, ssbo),
   1093    ir_intrinsic_ssbo_atomic_or = MAKE_INTRINSIC_FOR_TYPE(atomic_or, ssbo),
   1094    ir_intrinsic_ssbo_atomic_xor = MAKE_INTRINSIC_FOR_TYPE(atomic_xor, ssbo),
   1095    ir_intrinsic_ssbo_atomic_min = MAKE_INTRINSIC_FOR_TYPE(atomic_min, ssbo),
   1096    ir_intrinsic_ssbo_atomic_max = MAKE_INTRINSIC_FOR_TYPE(atomic_max, ssbo),
   1097    ir_intrinsic_ssbo_atomic_exchange = MAKE_INTRINSIC_FOR_TYPE(atomic_exchange, ssbo),
   1098    ir_intrinsic_ssbo_atomic_comp_swap = MAKE_INTRINSIC_FOR_TYPE(atomic_comp_swap, ssbo),
   1099 
   1100    ir_intrinsic_memory_barrier,
   1101    ir_intrinsic_shader_clock,
   1102    ir_intrinsic_group_memory_barrier,
   1103    ir_intrinsic_memory_barrier_atomic_counter,
   1104    ir_intrinsic_memory_barrier_buffer,
   1105    ir_intrinsic_memory_barrier_image,
   1106    ir_intrinsic_memory_barrier_shared,
   1107 
   1108    ir_intrinsic_shared_load,
   1109    ir_intrinsic_shared_store = MAKE_INTRINSIC_FOR_TYPE(store, shared),
   1110    ir_intrinsic_shared_atomic_add = MAKE_INTRINSIC_FOR_TYPE(atomic_add, shared),
   1111    ir_intrinsic_shared_atomic_and = MAKE_INTRINSIC_FOR_TYPE(atomic_and, shared),
   1112    ir_intrinsic_shared_atomic_or = MAKE_INTRINSIC_FOR_TYPE(atomic_or, shared),
   1113    ir_intrinsic_shared_atomic_xor = MAKE_INTRINSIC_FOR_TYPE(atomic_xor, shared),
   1114    ir_intrinsic_shared_atomic_min = MAKE_INTRINSIC_FOR_TYPE(atomic_min, shared),
   1115    ir_intrinsic_shared_atomic_max = MAKE_INTRINSIC_FOR_TYPE(atomic_max, shared),
   1116    ir_intrinsic_shared_atomic_exchange = MAKE_INTRINSIC_FOR_TYPE(atomic_exchange, shared),
   1117    ir_intrinsic_shared_atomic_comp_swap = MAKE_INTRINSIC_FOR_TYPE(atomic_comp_swap, shared),
   1118 };
   1119 
   1120 /*@{*/
   1121 /**
   1122  * The representation of a function instance; may be the full definition or
   1123  * simply a prototype.
   1124  */
   1125 class ir_function_signature : public ir_instruction {
   1126    /* An ir_function_signature will be part of the list of signatures in
   1127     * an ir_function.
   1128     */
   1129 public:
   1130    ir_function_signature(const glsl_type *return_type,
   1131                          builtin_available_predicate builtin_avail = NULL);
   1132 
   1133    virtual ir_function_signature *clone(void *mem_ctx,
   1134 					struct hash_table *ht) const;
   1135    ir_function_signature *clone_prototype(void *mem_ctx,
   1136 					  struct hash_table *ht) const;
   1137 
   1138    virtual void accept(ir_visitor *v)
   1139    {
   1140       v->visit(this);
   1141    }
   1142 
   1143    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1144 
   1145    /**
   1146     * Attempt to evaluate this function as a constant expression,
   1147     * given a list of the actual parameters and the variable context.
   1148     * Returns NULL for non-built-ins.
   1149     */
   1150    ir_constant *constant_expression_value(exec_list *actual_parameters, struct hash_table *variable_context);
   1151 
   1152    /**
   1153     * Get the name of the function for which this is a signature
   1154     */
   1155    const char *function_name() const;
   1156 
   1157    /**
   1158     * Get a handle to the function for which this is a signature
   1159     *
   1160     * There is no setter function, this function returns a \c const pointer,
   1161     * and \c ir_function_signature::_function is private for a reason.  The
   1162     * only way to make a connection between a function and function signature
   1163     * is via \c ir_function::add_signature.  This helps ensure that certain
   1164     * invariants (i.e., a function signature is in the list of signatures for
   1165     * its \c _function) are met.
   1166     *
   1167     * \sa ir_function::add_signature
   1168     */
   1169    inline const class ir_function *function() const
   1170    {
   1171       return this->_function;
   1172    }
   1173 
   1174    /**
   1175     * Check whether the qualifiers match between this signature's parameters
   1176     * and the supplied parameter list.  If not, returns the name of the first
   1177     * parameter with mismatched qualifiers (for use in error messages).
   1178     */
   1179    const char *qualifiers_match(exec_list *params);
   1180 
   1181    /**
   1182     * Replace the current parameter list with the given one.  This is useful
   1183     * if the current information came from a prototype, and either has invalid
   1184     * or missing parameter names.
   1185     */
   1186    void replace_parameters(exec_list *new_params);
   1187 
   1188    /**
   1189     * Function return type.
   1190     *
   1191     * \note This discards the optional precision qualifier.
   1192     */
   1193    const struct glsl_type *return_type;
   1194 
   1195    /**
   1196     * List of ir_variable of function parameters.
   1197     *
   1198     * This represents the storage.  The paramaters passed in a particular
   1199     * call will be in ir_call::actual_paramaters.
   1200     */
   1201    struct exec_list parameters;
   1202 
   1203    /** Whether or not this function has a body (which may be empty). */
   1204    unsigned is_defined:1;
   1205 
   1206    /** Whether or not this function signature is a built-in. */
   1207    bool is_builtin() const;
   1208 
   1209    /**
   1210     * Whether or not this function is an intrinsic to be implemented
   1211     * by the driver.
   1212     */
   1213    inline bool is_intrinsic() const
   1214    {
   1215       return intrinsic_id != ir_intrinsic_invalid;
   1216    }
   1217 
   1218    /** Indentifier for this intrinsic. */
   1219    enum ir_intrinsic_id intrinsic_id;
   1220 
   1221    /** Whether or not a built-in is available for this shader. */
   1222    bool is_builtin_available(const _mesa_glsl_parse_state *state) const;
   1223 
   1224    /** Body of instructions in the function. */
   1225    struct exec_list body;
   1226 
   1227 private:
   1228    /**
   1229     * A function pointer to a predicate that answers whether a built-in
   1230     * function is available in the current shader.  NULL if not a built-in.
   1231     */
   1232    builtin_available_predicate builtin_avail;
   1233 
   1234    /** Function of which this signature is one overload. */
   1235    class ir_function *_function;
   1236 
   1237    /** Function signature of which this one is a prototype clone */
   1238    const ir_function_signature *origin;
   1239 
   1240    friend class ir_function;
   1241 
   1242    /**
   1243     * Helper function to run a list of instructions for constant
   1244     * expression evaluation.
   1245     *
   1246     * The hash table represents the values of the visible variables.
   1247     * There are no scoping issues because the table is indexed on
   1248     * ir_variable pointers, not variable names.
   1249     *
   1250     * Returns false if the expression is not constant, true otherwise,
   1251     * and the value in *result if result is non-NULL.
   1252     */
   1253    bool constant_expression_evaluate_expression_list(const struct exec_list &body,
   1254 						     struct hash_table *variable_context,
   1255 						     ir_constant **result);
   1256 };
   1257 
   1258 
   1259 /**
   1260  * Header for tracking multiple overloaded functions with the same name.
   1261  * Contains a list of ir_function_signatures representing each of the
   1262  * actual functions.
   1263  */
   1264 class ir_function : public ir_instruction {
   1265 public:
   1266    ir_function(const char *name);
   1267 
   1268    virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const;
   1269 
   1270    virtual void accept(ir_visitor *v)
   1271    {
   1272       v->visit(this);
   1273    }
   1274 
   1275    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1276 
   1277    void add_signature(ir_function_signature *sig)
   1278    {
   1279       sig->_function = this;
   1280       this->signatures.push_tail(sig);
   1281    }
   1282 
   1283    /**
   1284     * Find a signature that matches a set of actual parameters, taking implicit
   1285     * conversions into account.  Also flags whether the match was exact.
   1286     */
   1287    ir_function_signature *matching_signature(_mesa_glsl_parse_state *state,
   1288                                              const exec_list *actual_param,
   1289                                              bool allow_builtins,
   1290 					     bool *match_is_exact);
   1291 
   1292    /**
   1293     * Find a signature that matches a set of actual parameters, taking implicit
   1294     * conversions into account.
   1295     */
   1296    ir_function_signature *matching_signature(_mesa_glsl_parse_state *state,
   1297                                              const exec_list *actual_param,
   1298                                              bool allow_builtins);
   1299 
   1300    /**
   1301     * Find a signature that exactly matches a set of actual parameters without
   1302     * any implicit type conversions.
   1303     */
   1304    ir_function_signature *exact_matching_signature(_mesa_glsl_parse_state *state,
   1305                                                    const exec_list *actual_ps);
   1306 
   1307    /**
   1308     * Name of the function.
   1309     */
   1310    const char *name;
   1311 
   1312    /** Whether or not this function has a signature that isn't a built-in. */
   1313    bool has_user_signature();
   1314 
   1315    /**
   1316     * List of ir_function_signature for each overloaded function with this name.
   1317     */
   1318    struct exec_list signatures;
   1319 
   1320    /**
   1321     * is this function a subroutine type declaration
   1322     * e.g. subroutine void type1(float arg1);
   1323     */
   1324    bool is_subroutine;
   1325 
   1326    /**
   1327     * is this function associated to a subroutine type
   1328     * e.g. subroutine (type1, type2) function_name { function_body };
   1329     * would have num_subroutine_types 2,
   1330     * and pointers to the type1 and type2 types.
   1331     */
   1332    int num_subroutine_types;
   1333    const struct glsl_type **subroutine_types;
   1334 
   1335    int subroutine_index;
   1336 };
   1337 
   1338 inline const char *ir_function_signature::function_name() const
   1339 {
   1340    return this->_function->name;
   1341 }
   1342 /*@}*/
   1343 
   1344 
   1345 /**
   1346  * IR instruction representing high-level if-statements
   1347  */
   1348 class ir_if : public ir_instruction {
   1349 public:
   1350    ir_if(ir_rvalue *condition)
   1351       : ir_instruction(ir_type_if), condition(condition)
   1352    {
   1353    }
   1354 
   1355    virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const;
   1356 
   1357    virtual void accept(ir_visitor *v)
   1358    {
   1359       v->visit(this);
   1360    }
   1361 
   1362    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1363 
   1364    ir_rvalue *condition;
   1365    /** List of ir_instruction for the body of the then branch */
   1366    exec_list  then_instructions;
   1367    /** List of ir_instruction for the body of the else branch */
   1368    exec_list  else_instructions;
   1369 };
   1370 
   1371 
   1372 /**
   1373  * IR instruction representing a high-level loop structure.
   1374  */
   1375 class ir_loop : public ir_instruction {
   1376 public:
   1377    ir_loop();
   1378 
   1379    virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
   1380 
   1381    virtual void accept(ir_visitor *v)
   1382    {
   1383       v->visit(this);
   1384    }
   1385 
   1386    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1387 
   1388    /** List of ir_instruction that make up the body of the loop. */
   1389    exec_list body_instructions;
   1390 };
   1391 
   1392 
   1393 class ir_assignment : public ir_instruction {
   1394 public:
   1395    ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition = NULL);
   1396 
   1397    /**
   1398     * Construct an assignment with an explicit write mask
   1399     *
   1400     * \note
   1401     * Since a write mask is supplied, the LHS must already be a bare
   1402     * \c ir_dereference.  The cannot be any swizzles in the LHS.
   1403     */
   1404    ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, ir_rvalue *condition,
   1405 		 unsigned write_mask);
   1406 
   1407    virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const;
   1408 
   1409    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1410 
   1411    virtual void accept(ir_visitor *v)
   1412    {
   1413       v->visit(this);
   1414    }
   1415 
   1416    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1417 
   1418    /**
   1419     * Get a whole variable written by an assignment
   1420     *
   1421     * If the LHS of the assignment writes a whole variable, the variable is
   1422     * returned.  Otherwise \c NULL is returned.  Examples of whole-variable
   1423     * assignment are:
   1424     *
   1425     *  - Assigning to a scalar
   1426     *  - Assigning to all components of a vector
   1427     *  - Whole array (or matrix) assignment
   1428     *  - Whole structure assignment
   1429     */
   1430    ir_variable *whole_variable_written();
   1431 
   1432    /**
   1433     * Set the LHS of an assignment
   1434     */
   1435    void set_lhs(ir_rvalue *lhs);
   1436 
   1437    /**
   1438     * Left-hand side of the assignment.
   1439     *
   1440     * This should be treated as read only.  If you need to set the LHS of an
   1441     * assignment, use \c ir_assignment::set_lhs.
   1442     */
   1443    ir_dereference *lhs;
   1444 
   1445    /**
   1446     * Value being assigned
   1447     */
   1448    ir_rvalue *rhs;
   1449 
   1450    /**
   1451     * Optional condition for the assignment.
   1452     */
   1453    ir_rvalue *condition;
   1454 
   1455 
   1456    /**
   1457     * Component mask written
   1458     *
   1459     * For non-vector types in the LHS, this field will be zero.  For vector
   1460     * types, a bit will be set for each component that is written.  Note that
   1461     * for \c vec2 and \c vec3 types only the lower bits will ever be set.
   1462     *
   1463     * A partially-set write mask means that each enabled channel gets
   1464     * the value from a consecutive channel of the rhs.  For example,
   1465     * to write just .xyw of gl_FrontColor with color:
   1466     *
   1467     * (assign (constant bool (1)) (xyw)
   1468     *     (var_ref gl_FragColor)
   1469     *     (swiz xyw (var_ref color)))
   1470     */
   1471    unsigned write_mask:4;
   1472 };
   1473 
   1474 #include "ir_expression_operation.h"
   1475 
   1476 extern const char *const ir_expression_operation_strings[ir_last_opcode + 1];
   1477 extern const char *const ir_expression_operation_enum_strings[ir_last_opcode + 1];
   1478 
   1479 class ir_expression : public ir_rvalue {
   1480 public:
   1481    ir_expression(int op, const struct glsl_type *type,
   1482                  ir_rvalue *op0, ir_rvalue *op1 = NULL,
   1483                  ir_rvalue *op2 = NULL, ir_rvalue *op3 = NULL);
   1484 
   1485    /**
   1486     * Constructor for unary operation expressions
   1487     */
   1488    ir_expression(int op, ir_rvalue *);
   1489 
   1490    /**
   1491     * Constructor for binary operation expressions
   1492     */
   1493    ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1);
   1494 
   1495    /**
   1496     * Constructor for ternary operation expressions
   1497     */
   1498    ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2);
   1499 
   1500    virtual bool equals(const ir_instruction *ir,
   1501                        enum ir_node_type ignore = ir_type_unset) const;
   1502 
   1503    virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const;
   1504 
   1505    /**
   1506     * Attempt to constant-fold the expression
   1507     *
   1508     * The "variable_context" hash table links ir_variable * to ir_constant *
   1509     * that represent the variables' values.  \c NULL represents an empty
   1510     * context.
   1511     *
   1512     * If the expression cannot be constant folded, this method will return
   1513     * \c NULL.
   1514     */
   1515    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1516 
   1517    /**
   1518     * Determine the number of operands used by an expression
   1519     */
   1520    static unsigned int get_num_operands(ir_expression_operation);
   1521 
   1522    /**
   1523     * Determine the number of operands used by an expression
   1524     */
   1525    unsigned int get_num_operands() const
   1526    {
   1527       return (this->operation == ir_quadop_vector)
   1528 	 ? this->type->vector_elements : get_num_operands(operation);
   1529    }
   1530 
   1531    /**
   1532     * Return whether the expression operates on vectors horizontally.
   1533     */
   1534    bool is_horizontal() const
   1535    {
   1536       return operation == ir_binop_all_equal ||
   1537              operation == ir_binop_any_nequal ||
   1538              operation == ir_binop_dot ||
   1539              operation == ir_binop_vector_extract ||
   1540              operation == ir_triop_vector_insert ||
   1541              operation == ir_binop_ubo_load ||
   1542              operation == ir_quadop_vector;
   1543    }
   1544 
   1545    /**
   1546     * Do a reverse-lookup to translate the given string into an operator.
   1547     */
   1548    static ir_expression_operation get_operator(const char *);
   1549 
   1550    virtual void accept(ir_visitor *v)
   1551    {
   1552       v->visit(this);
   1553    }
   1554 
   1555    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1556 
   1557    virtual ir_variable *variable_referenced() const;
   1558 
   1559    ir_expression_operation operation;
   1560    ir_rvalue *operands[4];
   1561 };
   1562 
   1563 
   1564 /**
   1565  * HIR instruction representing a high-level function call, containing a list
   1566  * of parameters and returning a value in the supplied temporary.
   1567  */
   1568 class ir_call : public ir_instruction {
   1569 public:
   1570    ir_call(ir_function_signature *callee,
   1571 	   ir_dereference_variable *return_deref,
   1572 	   exec_list *actual_parameters)
   1573       : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(NULL), array_idx(NULL)
   1574    {
   1575       assert(callee->return_type != NULL);
   1576       actual_parameters->move_nodes_to(& this->actual_parameters);
   1577       this->use_builtin = callee->is_builtin();
   1578    }
   1579 
   1580    ir_call(ir_function_signature *callee,
   1581 	   ir_dereference_variable *return_deref,
   1582 	   exec_list *actual_parameters,
   1583 	   ir_variable *var, ir_rvalue *array_idx)
   1584       : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(var), array_idx(array_idx)
   1585    {
   1586       assert(callee->return_type != NULL);
   1587       actual_parameters->move_nodes_to(& this->actual_parameters);
   1588       this->use_builtin = callee->is_builtin();
   1589    }
   1590 
   1591    virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const;
   1592 
   1593    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1594 
   1595    virtual void accept(ir_visitor *v)
   1596    {
   1597       v->visit(this);
   1598    }
   1599 
   1600    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1601 
   1602    /**
   1603     * Get the name of the function being called.
   1604     */
   1605    const char *callee_name() const
   1606    {
   1607       return callee->function_name();
   1608    }
   1609 
   1610    /**
   1611     * Generates an inline version of the function before @ir,
   1612     * storing the return value in return_deref.
   1613     */
   1614    void generate_inline(ir_instruction *ir);
   1615 
   1616    /**
   1617     * Storage for the function's return value.
   1618     * This must be NULL if the return type is void.
   1619     */
   1620    ir_dereference_variable *return_deref;
   1621 
   1622    /**
   1623     * The specific function signature being called.
   1624     */
   1625    ir_function_signature *callee;
   1626 
   1627    /* List of ir_rvalue of paramaters passed in this call. */
   1628    exec_list actual_parameters;
   1629 
   1630    /** Should this call only bind to a built-in function? */
   1631    bool use_builtin;
   1632 
   1633    /*
   1634     * ARB_shader_subroutine support -
   1635     * the subroutine uniform variable and array index
   1636     * rvalue to be used in the lowering pass later.
   1637     */
   1638    ir_variable *sub_var;
   1639    ir_rvalue *array_idx;
   1640 };
   1641 
   1642 
   1643 /**
   1644  * \name Jump-like IR instructions.
   1645  *
   1646  * These include \c break, \c continue, \c return, and \c discard.
   1647  */
   1648 /*@{*/
   1649 class ir_jump : public ir_instruction {
   1650 protected:
   1651    ir_jump(enum ir_node_type t)
   1652       : ir_instruction(t)
   1653    {
   1654    }
   1655 };
   1656 
   1657 class ir_return : public ir_jump {
   1658 public:
   1659    ir_return()
   1660       : ir_jump(ir_type_return), value(NULL)
   1661    {
   1662    }
   1663 
   1664    ir_return(ir_rvalue *value)
   1665       : ir_jump(ir_type_return), value(value)
   1666    {
   1667    }
   1668 
   1669    virtual ir_return *clone(void *mem_ctx, struct hash_table *) const;
   1670 
   1671    ir_rvalue *get_value() const
   1672    {
   1673       return value;
   1674    }
   1675 
   1676    virtual void accept(ir_visitor *v)
   1677    {
   1678       v->visit(this);
   1679    }
   1680 
   1681    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1682 
   1683    ir_rvalue *value;
   1684 };
   1685 
   1686 
   1687 /**
   1688  * Jump instructions used inside loops
   1689  *
   1690  * These include \c break and \c continue.  The \c break within a loop is
   1691  * different from the \c break within a switch-statement.
   1692  *
   1693  * \sa ir_switch_jump
   1694  */
   1695 class ir_loop_jump : public ir_jump {
   1696 public:
   1697    enum jump_mode {
   1698       jump_break,
   1699       jump_continue
   1700    };
   1701 
   1702    ir_loop_jump(jump_mode mode)
   1703       : ir_jump(ir_type_loop_jump)
   1704    {
   1705       this->mode = mode;
   1706    }
   1707 
   1708    virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const;
   1709 
   1710    virtual void accept(ir_visitor *v)
   1711    {
   1712       v->visit(this);
   1713    }
   1714 
   1715    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1716 
   1717    bool is_break() const
   1718    {
   1719       return mode == jump_break;
   1720    }
   1721 
   1722    bool is_continue() const
   1723    {
   1724       return mode == jump_continue;
   1725    }
   1726 
   1727    /** Mode selector for the jump instruction. */
   1728    enum jump_mode mode;
   1729 };
   1730 
   1731 /**
   1732  * IR instruction representing discard statements.
   1733  */
   1734 class ir_discard : public ir_jump {
   1735 public:
   1736    ir_discard()
   1737       : ir_jump(ir_type_discard)
   1738    {
   1739       this->condition = NULL;
   1740    }
   1741 
   1742    ir_discard(ir_rvalue *cond)
   1743       : ir_jump(ir_type_discard)
   1744    {
   1745       this->condition = cond;
   1746    }
   1747 
   1748    virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const;
   1749 
   1750    virtual void accept(ir_visitor *v)
   1751    {
   1752       v->visit(this);
   1753    }
   1754 
   1755    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1756 
   1757    ir_rvalue *condition;
   1758 };
   1759 /*@}*/
   1760 
   1761 
   1762 /**
   1763  * Texture sampling opcodes used in ir_texture
   1764  */
   1765 enum ir_texture_opcode {
   1766    ir_tex,		/**< Regular texture look-up */
   1767    ir_txb,		/**< Texture look-up with LOD bias */
   1768    ir_txl,		/**< Texture look-up with explicit LOD */
   1769    ir_txd,		/**< Texture look-up with partial derivatvies */
   1770    ir_txf,		/**< Texel fetch with explicit LOD */
   1771    ir_txf_ms,           /**< Multisample texture fetch */
   1772    ir_txs,		/**< Texture size */
   1773    ir_lod,		/**< Texture lod query */
   1774    ir_tg4,		/**< Texture gather */
   1775    ir_query_levels,     /**< Texture levels query */
   1776    ir_texture_samples,  /**< Texture samples query */
   1777    ir_samples_identical, /**< Query whether all samples are definitely identical. */
   1778 };
   1779 
   1780 
   1781 /**
   1782  * IR instruction to sample a texture
   1783  *
   1784  * The specific form of the IR instruction depends on the \c mode value
   1785  * selected from \c ir_texture_opcodes.  In the printed IR, these will
   1786  * appear as:
   1787  *
   1788  *                                    Texel offset (0 or an expression)
   1789  *                                    | Projection divisor
   1790  *                                    | |  Shadow comparator
   1791  *                                    | |  |
   1792  *                                    v v  v
   1793  * (tex <type> <sampler> <coordinate> 0 1 ( ))
   1794  * (txb <type> <sampler> <coordinate> 0 1 ( ) <bias>)
   1795  * (txl <type> <sampler> <coordinate> 0 1 ( ) <lod>)
   1796  * (txd <type> <sampler> <coordinate> 0 1 ( ) (dPdx dPdy))
   1797  * (txf <type> <sampler> <coordinate> 0       <lod>)
   1798  * (txf_ms
   1799  *      <type> <sampler> <coordinate>         <sample_index>)
   1800  * (txs <type> <sampler> <lod>)
   1801  * (lod <type> <sampler> <coordinate>)
   1802  * (tg4 <type> <sampler> <coordinate> <offset> <component>)
   1803  * (query_levels <type> <sampler>)
   1804  * (samples_identical <sampler> <coordinate>)
   1805  */
   1806 class ir_texture : public ir_rvalue {
   1807 public:
   1808    ir_texture(enum ir_texture_opcode op)
   1809       : ir_rvalue(ir_type_texture),
   1810         op(op), sampler(NULL), coordinate(NULL), projector(NULL),
   1811         shadow_comparator(NULL), offset(NULL)
   1812    {
   1813       memset(&lod_info, 0, sizeof(lod_info));
   1814    }
   1815 
   1816    virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const;
   1817 
   1818    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1819 
   1820    virtual void accept(ir_visitor *v)
   1821    {
   1822       v->visit(this);
   1823    }
   1824 
   1825    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1826 
   1827    virtual bool equals(const ir_instruction *ir,
   1828                        enum ir_node_type ignore = ir_type_unset) const;
   1829 
   1830    /**
   1831     * Return a string representing the ir_texture_opcode.
   1832     */
   1833    const char *opcode_string();
   1834 
   1835    /** Set the sampler and type. */
   1836    void set_sampler(ir_dereference *sampler, const glsl_type *type);
   1837 
   1838    /**
   1839     * Do a reverse-lookup to translate a string into an ir_texture_opcode.
   1840     */
   1841    static ir_texture_opcode get_opcode(const char *);
   1842 
   1843    enum ir_texture_opcode op;
   1844 
   1845    /** Sampler to use for the texture access. */
   1846    ir_dereference *sampler;
   1847 
   1848    /** Texture coordinate to sample */
   1849    ir_rvalue *coordinate;
   1850 
   1851    /**
   1852     * Value used for projective divide.
   1853     *
   1854     * If there is no projective divide (the common case), this will be
   1855     * \c NULL.  Optimization passes should check for this to point to a constant
   1856     * of 1.0 and replace that with \c NULL.
   1857     */
   1858    ir_rvalue *projector;
   1859 
   1860    /**
   1861     * Coordinate used for comparison on shadow look-ups.
   1862     *
   1863     * If there is no shadow comparison, this will be \c NULL.  For the
   1864     * \c ir_txf opcode, this *must* be \c NULL.
   1865     */
   1866    ir_rvalue *shadow_comparator;
   1867 
   1868    /** Texel offset. */
   1869    ir_rvalue *offset;
   1870 
   1871    union {
   1872       ir_rvalue *lod;		/**< Floating point LOD */
   1873       ir_rvalue *bias;		/**< Floating point LOD bias */
   1874       ir_rvalue *sample_index;  /**< MSAA sample index */
   1875       ir_rvalue *component;     /**< Gather component selector */
   1876       struct {
   1877 	 ir_rvalue *dPdx;	/**< Partial derivative of coordinate wrt X */
   1878 	 ir_rvalue *dPdy;	/**< Partial derivative of coordinate wrt Y */
   1879       } grad;
   1880    } lod_info;
   1881 };
   1882 
   1883 
   1884 struct ir_swizzle_mask {
   1885    unsigned x:2;
   1886    unsigned y:2;
   1887    unsigned z:2;
   1888    unsigned w:2;
   1889 
   1890    /**
   1891     * Number of components in the swizzle.
   1892     */
   1893    unsigned num_components:3;
   1894 
   1895    /**
   1896     * Does the swizzle contain duplicate components?
   1897     *
   1898     * L-value swizzles cannot contain duplicate components.
   1899     */
   1900    unsigned has_duplicates:1;
   1901 };
   1902 
   1903 
   1904 class ir_swizzle : public ir_rvalue {
   1905 public:
   1906    ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w,
   1907               unsigned count);
   1908 
   1909    ir_swizzle(ir_rvalue *val, const unsigned *components, unsigned count);
   1910 
   1911    ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask);
   1912 
   1913    virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const;
   1914 
   1915    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1916 
   1917    /**
   1918     * Construct an ir_swizzle from the textual representation.  Can fail.
   1919     */
   1920    static ir_swizzle *create(ir_rvalue *, const char *, unsigned vector_length);
   1921 
   1922    virtual void accept(ir_visitor *v)
   1923    {
   1924       v->visit(this);
   1925    }
   1926 
   1927    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   1928 
   1929    virtual bool equals(const ir_instruction *ir,
   1930                        enum ir_node_type ignore = ir_type_unset) const;
   1931 
   1932    bool is_lvalue() const
   1933    {
   1934       return val->is_lvalue() && !mask.has_duplicates;
   1935    }
   1936 
   1937    /**
   1938     * Get the variable that is ultimately referenced by an r-value
   1939     */
   1940    virtual ir_variable *variable_referenced() const;
   1941 
   1942    ir_rvalue *val;
   1943    ir_swizzle_mask mask;
   1944 
   1945 private:
   1946    /**
   1947     * Initialize the mask component of a swizzle
   1948     *
   1949     * This is used by the \c ir_swizzle constructors.
   1950     */
   1951    void init_mask(const unsigned *components, unsigned count);
   1952 };
   1953 
   1954 
   1955 class ir_dereference : public ir_rvalue {
   1956 public:
   1957    virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0;
   1958 
   1959    bool is_lvalue() const;
   1960 
   1961    /**
   1962     * Get the variable that is ultimately referenced by an r-value
   1963     */
   1964    virtual ir_variable *variable_referenced() const = 0;
   1965 
   1966 protected:
   1967    ir_dereference(enum ir_node_type t)
   1968       : ir_rvalue(t)
   1969    {
   1970    }
   1971 };
   1972 
   1973 
   1974 class ir_dereference_variable : public ir_dereference {
   1975 public:
   1976    ir_dereference_variable(ir_variable *var);
   1977 
   1978    virtual ir_dereference_variable *clone(void *mem_ctx,
   1979 					  struct hash_table *) const;
   1980 
   1981    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   1982 
   1983    virtual bool equals(const ir_instruction *ir,
   1984                        enum ir_node_type ignore = ir_type_unset) const;
   1985 
   1986    /**
   1987     * Get the variable that is ultimately referenced by an r-value
   1988     */
   1989    virtual ir_variable *variable_referenced() const
   1990    {
   1991       return this->var;
   1992    }
   1993 
   1994    virtual ir_variable *whole_variable_referenced()
   1995    {
   1996       /* ir_dereference_variable objects always dereference the entire
   1997        * variable.  However, if this dereference is dereferenced by anything
   1998        * else, the complete deferefernce chain is not a whole-variable
   1999        * dereference.  This method should only be called on the top most
   2000        * ir_rvalue in a dereference chain.
   2001        */
   2002       return this->var;
   2003    }
   2004 
   2005    virtual void accept(ir_visitor *v)
   2006    {
   2007       v->visit(this);
   2008    }
   2009 
   2010    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2011 
   2012    /**
   2013     * Object being dereferenced.
   2014     */
   2015    ir_variable *var;
   2016 };
   2017 
   2018 
   2019 class ir_dereference_array : public ir_dereference {
   2020 public:
   2021    ir_dereference_array(ir_rvalue *value, ir_rvalue *array_index);
   2022 
   2023    ir_dereference_array(ir_variable *var, ir_rvalue *array_index);
   2024 
   2025    virtual ir_dereference_array *clone(void *mem_ctx,
   2026 				       struct hash_table *) const;
   2027 
   2028    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   2029 
   2030    virtual bool equals(const ir_instruction *ir,
   2031                        enum ir_node_type ignore = ir_type_unset) const;
   2032 
   2033    /**
   2034     * Get the variable that is ultimately referenced by an r-value
   2035     */
   2036    virtual ir_variable *variable_referenced() const
   2037    {
   2038       return this->array->variable_referenced();
   2039    }
   2040 
   2041    virtual void accept(ir_visitor *v)
   2042    {
   2043       v->visit(this);
   2044    }
   2045 
   2046    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2047 
   2048    ir_rvalue *array;
   2049    ir_rvalue *array_index;
   2050 
   2051 private:
   2052    void set_array(ir_rvalue *value);
   2053 };
   2054 
   2055 
   2056 class ir_dereference_record : public ir_dereference {
   2057 public:
   2058    ir_dereference_record(ir_rvalue *value, const char *field);
   2059 
   2060    ir_dereference_record(ir_variable *var, const char *field);
   2061 
   2062    virtual ir_dereference_record *clone(void *mem_ctx,
   2063 					struct hash_table *) const;
   2064 
   2065    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   2066 
   2067    /**
   2068     * Get the variable that is ultimately referenced by an r-value
   2069     */
   2070    virtual ir_variable *variable_referenced() const
   2071    {
   2072       return this->record->variable_referenced();
   2073    }
   2074 
   2075    virtual void accept(ir_visitor *v)
   2076    {
   2077       v->visit(this);
   2078    }
   2079 
   2080    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2081 
   2082    ir_rvalue *record;
   2083    const char *field;
   2084 };
   2085 
   2086 
   2087 /**
   2088  * Data stored in an ir_constant
   2089  */
   2090 union ir_constant_data {
   2091       unsigned u[16];
   2092       int i[16];
   2093       float f[16];
   2094       bool b[16];
   2095       double d[16];
   2096 };
   2097 
   2098 
   2099 class ir_constant : public ir_rvalue {
   2100 public:
   2101    ir_constant(const struct glsl_type *type, const ir_constant_data *data);
   2102    ir_constant(bool b, unsigned vector_elements=1);
   2103    ir_constant(unsigned int u, unsigned vector_elements=1);
   2104    ir_constant(int i, unsigned vector_elements=1);
   2105    ir_constant(float f, unsigned vector_elements=1);
   2106    ir_constant(double d, unsigned vector_elements=1);
   2107 
   2108    /**
   2109     * Construct an ir_constant from a list of ir_constant values
   2110     */
   2111    ir_constant(const struct glsl_type *type, exec_list *values);
   2112 
   2113    /**
   2114     * Construct an ir_constant from a scalar component of another ir_constant
   2115     *
   2116     * The new \c ir_constant inherits the type of the component from the
   2117     * source constant.
   2118     *
   2119     * \note
   2120     * In the case of a matrix constant, the new constant is a scalar, \b not
   2121     * a vector.
   2122     */
   2123    ir_constant(const ir_constant *c, unsigned i);
   2124 
   2125    /**
   2126     * Return a new ir_constant of the specified type containing all zeros.
   2127     */
   2128    static ir_constant *zero(void *mem_ctx, const glsl_type *type);
   2129 
   2130    virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const;
   2131 
   2132    virtual ir_constant *constant_expression_value(struct hash_table *variable_context = NULL);
   2133 
   2134    virtual void accept(ir_visitor *v)
   2135    {
   2136       v->visit(this);
   2137    }
   2138 
   2139    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2140 
   2141    virtual bool equals(const ir_instruction *ir,
   2142                        enum ir_node_type ignore = ir_type_unset) const;
   2143 
   2144    /**
   2145     * Get a particular component of a constant as a specific type
   2146     *
   2147     * This is useful, for example, to get a value from an integer constant
   2148     * as a float or bool.  This appears frequently when constructors are
   2149     * called with all constant parameters.
   2150     */
   2151    /*@{*/
   2152    bool get_bool_component(unsigned i) const;
   2153    float get_float_component(unsigned i) const;
   2154    double get_double_component(unsigned i) const;
   2155    int get_int_component(unsigned i) const;
   2156    unsigned get_uint_component(unsigned i) const;
   2157    /*@}*/
   2158 
   2159    ir_constant *get_array_element(unsigned i) const;
   2160 
   2161    ir_constant *get_record_field(const char *name);
   2162 
   2163    /**
   2164     * Copy the values on another constant at a given offset.
   2165     *
   2166     * The offset is ignored for array or struct copies, it's only for
   2167     * scalars or vectors into vectors or matrices.
   2168     *
   2169     * With identical types on both sides and zero offset it's clone()
   2170     * without creating a new object.
   2171     */
   2172 
   2173    void copy_offset(ir_constant *src, int offset);
   2174 
   2175    /**
   2176     * Copy the values on another constant at a given offset and
   2177     * following an assign-like mask.
   2178     *
   2179     * The mask is ignored for scalars.
   2180     *
   2181     * Note that this function only handles what assign can handle,
   2182     * i.e. at most a vector as source and a column of a matrix as
   2183     * destination.
   2184     */
   2185 
   2186    void copy_masked_offset(ir_constant *src, int offset, unsigned int mask);
   2187 
   2188    /**
   2189     * Determine whether a constant has the same value as another constant
   2190     *
   2191     * \sa ir_constant::is_zero, ir_constant::is_one,
   2192     * ir_constant::is_negative_one
   2193     */
   2194    bool has_value(const ir_constant *) const;
   2195 
   2196    /**
   2197     * Return true if this ir_constant represents the given value.
   2198     *
   2199     * For vectors, this checks that each component is the given value.
   2200     */
   2201    virtual bool is_value(float f, int i) const;
   2202    virtual bool is_zero() const;
   2203    virtual bool is_one() const;
   2204    virtual bool is_negative_one() const;
   2205 
   2206    /**
   2207     * Return true for constants that could be stored as 16-bit unsigned values.
   2208     *
   2209     * Note that this will return true even for signed integer ir_constants, as
   2210     * long as the value is non-negative and fits in 16-bits.
   2211     */
   2212    virtual bool is_uint16_constant() const;
   2213 
   2214    /**
   2215     * Value of the constant.
   2216     *
   2217     * The field used to back the values supplied by the constant is determined
   2218     * by the type associated with the \c ir_instruction.  Constants may be
   2219     * scalars, vectors, or matrices.
   2220     */
   2221    union ir_constant_data value;
   2222 
   2223    /* Array elements */
   2224    ir_constant **array_elements;
   2225 
   2226    /* Structure fields */
   2227    exec_list components;
   2228 
   2229 private:
   2230    /**
   2231     * Parameterless constructor only used by the clone method
   2232     */
   2233    ir_constant(void);
   2234 };
   2235 
   2236 /**
   2237  * IR instruction to emit a vertex in a geometry shader.
   2238  */
   2239 class ir_emit_vertex : public ir_instruction {
   2240 public:
   2241    ir_emit_vertex(ir_rvalue *stream)
   2242       : ir_instruction(ir_type_emit_vertex),
   2243         stream(stream)
   2244    {
   2245       assert(stream);
   2246    }
   2247 
   2248    virtual void accept(ir_visitor *v)
   2249    {
   2250       v->visit(this);
   2251    }
   2252 
   2253    virtual ir_emit_vertex *clone(void *mem_ctx, struct hash_table *ht) const
   2254    {
   2255       return new(mem_ctx) ir_emit_vertex(this->stream->clone(mem_ctx, ht));
   2256    }
   2257 
   2258    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2259 
   2260    int stream_id() const
   2261    {
   2262       return stream->as_constant()->value.i[0];
   2263    }
   2264 
   2265    ir_rvalue *stream;
   2266 };
   2267 
   2268 /**
   2269  * IR instruction to complete the current primitive and start a new one in a
   2270  * geometry shader.
   2271  */
   2272 class ir_end_primitive : public ir_instruction {
   2273 public:
   2274    ir_end_primitive(ir_rvalue *stream)
   2275       : ir_instruction(ir_type_end_primitive),
   2276         stream(stream)
   2277    {
   2278       assert(stream);
   2279    }
   2280 
   2281    virtual void accept(ir_visitor *v)
   2282    {
   2283       v->visit(this);
   2284    }
   2285 
   2286    virtual ir_end_primitive *clone(void *mem_ctx, struct hash_table *ht) const
   2287    {
   2288       return new(mem_ctx) ir_end_primitive(this->stream->clone(mem_ctx, ht));
   2289    }
   2290 
   2291    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2292 
   2293    int stream_id() const
   2294    {
   2295       return stream->as_constant()->value.i[0];
   2296    }
   2297 
   2298    ir_rvalue *stream;
   2299 };
   2300 
   2301 /**
   2302  * IR instruction for tessellation control and compute shader barrier.
   2303  */
   2304 class ir_barrier : public ir_instruction {
   2305 public:
   2306    ir_barrier()
   2307       : ir_instruction(ir_type_barrier)
   2308    {
   2309    }
   2310 
   2311    virtual void accept(ir_visitor *v)
   2312    {
   2313       v->visit(this);
   2314    }
   2315 
   2316    virtual ir_barrier *clone(void *mem_ctx, struct hash_table *) const
   2317    {
   2318       return new(mem_ctx) ir_barrier();
   2319    }
   2320 
   2321    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
   2322 };
   2323 
   2324 /*@}*/
   2325 
   2326 /**
   2327  * Apply a visitor to each IR node in a list
   2328  */
   2329 void
   2330 visit_exec_list(exec_list *list, ir_visitor *visitor);
   2331 
   2332 /**
   2333  * Validate invariants on each IR node in a list
   2334  */
   2335 void validate_ir_tree(exec_list *instructions);
   2336 
   2337 struct _mesa_glsl_parse_state;
   2338 struct gl_shader_program;
   2339 
   2340 /**
   2341  * Detect whether an unlinked shader contains static recursion
   2342  *
   2343  * If the list of instructions is determined to contain static recursion,
   2344  * \c _mesa_glsl_error will be called to emit error messages for each function
   2345  * that is in the recursion cycle.
   2346  */
   2347 void
   2348 detect_recursion_unlinked(struct _mesa_glsl_parse_state *state,
   2349 			  exec_list *instructions);
   2350 
   2351 /**
   2352  * Detect whether a linked shader contains static recursion
   2353  *
   2354  * If the list of instructions is determined to contain static recursion,
   2355  * \c link_error_printf will be called to emit error messages for each function
   2356  * that is in the recursion cycle.  In addition,
   2357  * \c gl_shader_program::LinkStatus will be set to false.
   2358  */
   2359 void
   2360 detect_recursion_linked(struct gl_shader_program *prog,
   2361 			exec_list *instructions);
   2362 
   2363 /**
   2364  * Make a clone of each IR instruction in a list
   2365  *
   2366  * \param in   List of IR instructions that are to be cloned
   2367  * \param out  List to hold the cloned instructions
   2368  */
   2369 void
   2370 clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in);
   2371 
   2372 extern void
   2373 _mesa_glsl_initialize_variables(exec_list *instructions,
   2374 				struct _mesa_glsl_parse_state *state);
   2375 
   2376 extern void
   2377 _mesa_glsl_initialize_derived_variables(struct gl_context *ctx,
   2378                                         gl_shader *shader);
   2379 
   2380 extern void
   2381 _mesa_glsl_initialize_builtin_functions();
   2382 
   2383 extern ir_function_signature *
   2384 _mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state,
   2385                                  const char *name, exec_list *actual_parameters);
   2386 
   2387 extern ir_function *
   2388 _mesa_glsl_find_builtin_function_by_name(const char *name);
   2389 
   2390 extern gl_shader *
   2391 _mesa_glsl_get_builtin_function_shader(void);
   2392 
   2393 extern ir_function_signature *
   2394 _mesa_get_main_function_signature(glsl_symbol_table *symbols);
   2395 
   2396 extern void
   2397 _mesa_glsl_release_builtin_functions(void);
   2398 
   2399 extern void
   2400 reparent_ir(exec_list *list, void *mem_ctx);
   2401 
   2402 extern void
   2403 do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
   2404                       gl_shader_stage shader_stage);
   2405 
   2406 extern char *
   2407 prototype_string(const glsl_type *return_type, const char *name,
   2408 		 exec_list *parameters);
   2409 
   2410 const char *
   2411 mode_string(const ir_variable *var);
   2412 
   2413 /**
   2414  * Built-in / reserved GL variables names start with "gl_"
   2415  */
   2416 static inline bool
   2417 is_gl_identifier(const char *s)
   2418 {
   2419    return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_';
   2420 }
   2421 
   2422 extern "C" {
   2423 #endif /* __cplusplus */
   2424 
   2425 extern void _mesa_print_ir(FILE *f, struct exec_list *instructions,
   2426                            struct _mesa_glsl_parse_state *state);
   2427 
   2428 extern void
   2429 fprint_ir(FILE *f, const void *instruction);
   2430 
   2431 extern const struct gl_builtin_uniform_desc *
   2432 _mesa_glsl_get_builtin_uniform_desc(const char *name);
   2433 
   2434 #ifdef __cplusplus
   2435 } /* extern "C" */
   2436 #endif
   2437 
   2438 unsigned
   2439 vertices_per_prim(GLenum prim);
   2440 
   2441 #endif /* IR_H */
   2442