On 06/01/2014 12:58 PM, Matt Turner wrote: > Makes checking whether an object is an ir_dereference, an ir_rvalue, or > an ir_jump simpler. Since ir_dereference is a subclass or ir_rvalue, > list its subtypes first so that they can both generate nice code.
This tickles a memory from back when we added the ir_type tag... it could be useful to assign values in a different way. Instead of just assigning them in order, they could be created by combining a small bit field and sequential values: #define IR_TYPE_RVALUE_BASE 0x20 #define IR_TYPE_DEREF_BASE (0x40 | IR_TYPE_RVALUE_BASE) #define IR_TYPE_JUMP_BASE 0x80 enum ir_node_type { ir_type_unset, ir_type_variable, ir_type_assignment, ir_type_if, ir_type_call, ir_type_function, ir_type_function_signature, ir_type_emit_vertex, ir_type_end_primitive, ir_type_constant = IR_TYPE_RVALUE_BASE, ir_type_expression, ir_type_swizzle, ir_type_texture, ir_type_dereference_array = IR_TYPE_DEREF_BASE, ir_type_dereference_record, ir_type_dereference_variable, ir_type_discard = IR_TYPE_JUMP_BASE, ir_type_loop, ir_type_loop_jump, ir_type_return, ir_type_max /**< maximum ir_type enum number, for validation */ }; Then as_rvalue from patch 5 becomes: class ir_rvalue *as_rvalue() { return (ir_type & IR_TYPE_RVALUE_BASE != 0) ? this : NULL; } This doesn't scale very well to many different intermediate classes in the heirarchy. Dunno. > --- > src/glsl/ir.h | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/src/glsl/ir.h b/src/glsl/ir.h > index 02784e1..57552e0 100644 > --- a/src/glsl/ir.h > +++ b/src/glsl/ir.h > @@ -64,23 +64,23 @@ enum ir_node_type { > * \c ir_instruction::ir_type has not been initialized. > */ > ir_type_unset, > - ir_type_variable, > - ir_type_assignment, > - ir_type_call, > - ir_type_constant, > ir_type_dereference_array, > ir_type_dereference_record, > ir_type_dereference_variable, > - ir_type_discard, > + ir_type_constant, > ir_type_expression, > + ir_type_swizzle, > + ir_type_texture, > + ir_type_variable, > + ir_type_assignment, > + ir_type_call, > ir_type_function, > ir_type_function_signature, > ir_type_if, > ir_type_loop, > ir_type_loop_jump, > ir_type_return, > - ir_type_swizzle, > - ir_type_texture, > + ir_type_discard, > ir_type_emit_vertex, > ir_type_end_primitive, > ir_type_max /**< maximum ir_type enum number, for validation */ _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev