From: Ian Romanick <ian.d.roman...@intel.com> In the next patch, the type of ir_type is going to change from enum to uint8_t. Since the type won't be an enum, we won't get compiler warnings about, for example, switch statements that don't have cases for all the enum values. Using a getter that returns the enum type will enable us to continue getting those warnings.
Also, ir_type should never be changed after an object is created. Having it set in the constructor and no setter effectively makes it write-once. Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- src/glsl/ast_function.cpp | 2 +- src/glsl/ast_to_hir.cpp | 2 +- src/glsl/ir.h | 8 +++++++- src/glsl/ir_constant_expression.cpp | 4 ++-- src/glsl/ir_print_visitor.cpp | 2 +- src/glsl/ir_validate.cpp | 6 +++--- src/glsl/loop_analysis.cpp | 2 +- src/glsl/loop_controls.cpp | 2 +- src/glsl/loop_unroll.cpp | 2 +- src/glsl/lower_clip_distance.cpp | 4 ++-- src/glsl/lower_if_to_cond_assign.cpp | 4 ++-- src/glsl/lower_jumps.cpp | 6 +++--- src/glsl/lower_offset_array.cpp | 2 +- src/glsl/lower_ubo_reference.cpp | 4 ++-- src/glsl/lower_vector.cpp | 4 ++-- src/glsl/lower_vector_insert.cpp | 2 +- src/glsl/opt_constant_folding.cpp | 2 +- src/glsl/opt_cse.cpp | 2 +- src/glsl/opt_redundant_jumps.cpp | 6 +++--- src/glsl/opt_structure_splitting.cpp | 2 +- src/glsl/opt_vectorize.cpp | 2 +- src/mesa/program/ir_to_mesa.cpp | 2 +- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- 23 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp index c70b519..bad410b 100644 --- a/src/glsl/ast_function.cpp +++ b/src/glsl/ast_function.cpp @@ -175,7 +175,7 @@ verify_parameter_modes(_mesa_glsl_parse_state *state, /* Verify that 'const_in' parameters are ir_constants. */ if (formal->data.mode == ir_var_const_in && - actual->ir_type != ir_type_constant) { + actual->get_ir_type() != ir_type_constant) { _mesa_glsl_error(&loc, state, "parameter `in %s' must be a constant expression", formal->name); diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index ef1607d..3fcec19 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -756,7 +756,7 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, /* If the assignment LHS comes back as an ir_binop_vector_extract * expression, move it to the RHS as an ir_triop_vector_insert. */ - if (lhs->ir_type == ir_type_expression) { + if (lhs->get_ir_type() == ir_type_expression) { ir_expression *const lhs_expr = lhs->as_expression(); if (unlikely(lhs_expr->operation == ir_binop_vector_extract)) { diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 5d45469..7faee74 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -91,9 +91,15 @@ enum ir_node_type { * Base class of all IR instructions */ class ir_instruction : public exec_node { -public: +private: enum ir_node_type ir_type; +public: + inline enum ir_node_type get_ir_type() const + { + return this->ir_type; + } + /** * GCC 4.7+ and clang warn when deleting an ir_instruction unless * there's a virtual destructor present. Because we almost diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp index 8afe8f7..c07b951 100644 --- a/src/glsl/ir_constant_expression.cpp +++ b/src/glsl/ir_constant_expression.cpp @@ -403,7 +403,7 @@ constant_referenced(const ir_dereference *deref, if (variable_context == NULL) return false; - switch (deref->ir_type) { + switch (deref->get_ir_type()) { case ir_type_dereference_array: { const ir_dereference_array *const da = (const ir_dereference_array *) deref; @@ -1785,7 +1785,7 @@ bool ir_function_signature::constant_expression_evaluate_expression_list(const s { foreach_list(n, &body) { ir_instruction *inst = (ir_instruction *)n; - switch(inst->ir_type) { + switch(inst->get_ir_type()) { /* (declare () type symbol) */ case ir_type_variable: { diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp index 0a7695a..e5ac50e 100644 --- a/src/glsl/ir_print_visitor.cpp +++ b/src/glsl/ir_print_visitor.cpp @@ -70,7 +70,7 @@ _mesa_print_ir(FILE *f, exec_list *instructions, foreach_list(n, instructions) { ir_instruction *ir = (ir_instruction *) n; ir->fprint(f); - if (ir->ir_type != ir_type_function) + if (ir->get_ir_type() != ir_type_function) fprintf(f, "\n"); } fprintf(f, "\n)"); diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index 71defc8..1cfd0d5 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -175,7 +175,7 @@ ir_validate::visit_enter(ir_function *ir) foreach_list(node, &ir->signatures) { ir_instruction *sig = (ir_instruction *) node; - if (sig->ir_type != ir_type_function_signature) { + if (sig->get_ir_type() != ir_type_function_signature) { printf("Non-signature in signature list of function `%s'\n", ir->name); abort(); @@ -720,7 +720,7 @@ ir_validate::visit_enter(ir_call *ir) { ir_function_signature *const callee = ir->callee; - if (callee->ir_type != ir_type_function_signature) { + if (callee->get_ir_type() != ir_type_function_signature) { printf("IR called by ir_call is not ir_function_signature!\n"); abort(); } @@ -795,7 +795,7 @@ check_node_type(ir_instruction *ir, void *data) { (void) data; - if (ir->ir_type <= ir_type_unset || ir->ir_type >= ir_type_max) { + if (ir->get_ir_type() <= ir_type_unset || ir->get_ir_type() >= ir_type_max) { printf("Instruction node with unset type\n"); ir->print(); printf("\n"); } diff --git a/src/glsl/loop_analysis.cpp b/src/glsl/loop_analysis.cpp index d6a9ac7..2e41048 100644 --- a/src/glsl/loop_analysis.cpp +++ b/src/glsl/loop_analysis.cpp @@ -626,7 +626,7 @@ is_loop_terminator(ir_if *ir) if (inst == NULL) return false; - if (inst->ir_type != ir_type_loop_jump) + if (inst->get_ir_type() != ir_type_loop_jump) return false; ir_loop_jump *const jump = (ir_loop_jump *) inst; diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp index 3db06ad..08b7893 100644 --- a/src/glsl/loop_controls.cpp +++ b/src/glsl/loop_controls.cpp @@ -49,7 +49,7 @@ find_initial_value(ir_loop *loop, ir_variable *var) node = node->prev) { ir_instruction *ir = (ir_instruction *) node; - switch (ir->ir_type) { + switch (ir->get_ir_type()) { case ir_type_call: case ir_type_loop: case ir_type_loop_jump: diff --git a/src/glsl/loop_unroll.cpp b/src/glsl/loop_unroll.cpp index da53280..c685181 100644 --- a/src/glsl/loop_unroll.cpp +++ b/src/glsl/loop_unroll.cpp @@ -56,7 +56,7 @@ public: static bool is_break(ir_instruction *ir) { - return ir != NULL && ir->ir_type == ir_type_loop_jump + return ir != NULL && ir->get_ir_type() == ir_type_loop_jump && ((ir_loop_jump *) ir)->is_break(); } diff --git a/src/glsl/lower_clip_distance.cpp b/src/glsl/lower_clip_distance.cpp index 2d6138d..3f7fae1 100644 --- a/src/glsl/lower_clip_distance.cpp +++ b/src/glsl/lower_clip_distance.cpp @@ -343,7 +343,7 @@ lower_clip_distance_visitor::handle_rvalue(ir_rvalue **rv) void lower_clip_distance_visitor::fix_lhs(ir_assignment *ir) { - if (ir->lhs->ir_type == ir_type_expression) { + if (ir->lhs->get_ir_type() == ir_type_expression) { void *mem_ctx = ralloc_parent(ir); ir_expression *const expr = (ir_expression *) ir->lhs; @@ -352,7 +352,7 @@ lower_clip_distance_visitor::fix_lhs(ir_assignment *ir) * (vector_extract gl_ClipDistanceMESA[i], j). */ assert(expr->operation == ir_binop_vector_extract); - assert(expr->operands[0]->ir_type == ir_type_dereference_array); + assert(expr->operands[0]->get_ir_type() == ir_type_dereference_array); assert(expr->operands[0]->type == glsl_type::vec4_type); ir_dereference *const new_lhs = (ir_dereference *) expr->operands[0]; diff --git a/src/glsl/lower_if_to_cond_assign.cpp b/src/glsl/lower_if_to_cond_assign.cpp index f15b217..4c7bfde 100644 --- a/src/glsl/lower_if_to_cond_assign.cpp +++ b/src/glsl/lower_if_to_cond_assign.cpp @@ -97,7 +97,7 @@ void check_control_flow(ir_instruction *ir, void *data) { bool *found_control_flow = (bool *)data; - switch (ir->ir_type) { + switch (ir->get_ir_type()) { case ir_type_call: case ir_type_discard: case ir_type_loop: @@ -119,7 +119,7 @@ move_block_to_cond_assign(void *mem_ctx, foreach_list_safe(node, instructions) { ir_instruction *ir = (ir_instruction *) node; - if (ir->ir_type == ir_type_assignment) { + if (ir->get_ir_type() == ir_type_assignment) { ir_assignment *assign = (ir_assignment *)ir; if (hash_table_find(ht, assign) == NULL) { diff --git a/src/glsl/lower_jumps.cpp b/src/glsl/lower_jumps.cpp index 02f65f0..0aaa982 100644 --- a/src/glsl/lower_jumps.cpp +++ b/src/glsl/lower_jumps.cpp @@ -452,12 +452,12 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor { { if(!ir) return strength_none; - else if(ir->ir_type == ir_type_loop_jump) { + else if(ir->get_ir_type() == ir_type_loop_jump) { if(((ir_loop_jump*)ir)->is_break()) return strength_break; else return strength_continue; - } else if(ir->ir_type == ir_type_return) + } else if(ir->get_ir_type() == ir_type_return) return strength_return; else return strength_none; @@ -982,7 +982,7 @@ lower_continue: if (ir->return_type->is_void() && get_jump_strength((ir_instruction *) ir->body.get_tail())) { ir_jump *jump = (ir_jump *) ir->body.get_tail(); - assert (jump->ir_type == ir_type_return); + assert (jump->get_ir_type() == ir_type_return); jump->remove(); } diff --git a/src/glsl/lower_offset_array.cpp b/src/glsl/lower_offset_array.cpp index 0c235ed..2a55d24 100644 --- a/src/glsl/lower_offset_array.cpp +++ b/src/glsl/lower_offset_array.cpp @@ -54,7 +54,7 @@ public: void brw_lower_offset_array_visitor::handle_rvalue(ir_rvalue **rv) { - if (*rv == NULL || (*rv)->ir_type != ir_type_texture) + if (*rv == NULL || (*rv)->get_ir_type() != ir_type_texture) return; ir_texture *ir = (ir_texture *) *rv; diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp index 90e65bd..2454631 100644 --- a/src/glsl/lower_ubo_reference.cpp +++ b/src/glsl/lower_ubo_reference.cpp @@ -74,7 +74,7 @@ interface_field_name(void *mem_ctx, char *base_name, ir_dereference *d) ir_constant *previous_index = NULL; while (d != NULL) { - switch (d->ir_type) { + switch (d->get_ir_type()) { case ir_type_dereference_variable: { ir_dereference_variable *v = (ir_dereference_variable *) d; if (previous_index @@ -160,7 +160,7 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue) * array dereference has a variable index. */ while (deref) { - switch (deref->ir_type) { + switch (deref->get_ir_type()) { case ir_type_dereference_variable: { const_offset += ubo_var->Offset; deref = NULL; diff --git a/src/glsl/lower_vector.cpp b/src/glsl/lower_vector.cpp index a658410..2c99d39 100644 --- a/src/glsl/lower_vector.cpp +++ b/src/glsl/lower_vector.cpp @@ -71,7 +71,7 @@ is_extended_swizzle(ir_expression *ir) ir_rvalue *op = ir->operands[i]; while (op != NULL) { - switch (op->ir_type) { + switch (op->get_ir_type()) { case ir_type_constant: { const ir_constant *const c = op->as_constant(); @@ -199,7 +199,7 @@ lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue) /* FINISHME: This should try to coalesce assignments. */ for (unsigned i = 0; i < expr->type->vector_elements; i++) { - if (expr->operands[i]->ir_type == ir_type_constant) + if (expr->operands[i]->get_ir_type() == ir_type_constant) continue; ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp); diff --git a/src/glsl/lower_vector_insert.cpp b/src/glsl/lower_vector_insert.cpp index 6d7cfa9..4c31c09 100644 --- a/src/glsl/lower_vector_insert.cpp +++ b/src/glsl/lower_vector_insert.cpp @@ -55,7 +55,7 @@ public: void vector_insert_visitor::handle_rvalue(ir_rvalue **rv) { - if (*rv == NULL || (*rv)->ir_type != ir_type_expression) + if (*rv == NULL || (*rv)->get_ir_type() != ir_type_expression) return; ir_expression *const expr = (ir_expression *) *rv; diff --git a/src/glsl/opt_constant_folding.cpp b/src/glsl/opt_constant_folding.cpp index d0e5754..fd9f792 100644 --- a/src/glsl/opt_constant_folding.cpp +++ b/src/glsl/opt_constant_folding.cpp @@ -63,7 +63,7 @@ public: void ir_constant_folding_visitor::handle_rvalue(ir_rvalue **rvalue) { - if (*rvalue == NULL || (*rvalue)->ir_type == ir_type_constant) + if (*rvalue == NULL || (*rvalue)->get_ir_type() == ir_type_constant) return; /* Note that we do rvalue visitoring on leaving. So if an diff --git a/src/glsl/opt_cse.cpp b/src/glsl/opt_cse.cpp index 1b8782b..ac10b1b 100644 --- a/src/glsl/opt_cse.cpp +++ b/src/glsl/opt_cse.cpp @@ -228,7 +228,7 @@ is_cse_candidate(ir_rvalue *ir) /* Only handle expressions and textures currently. We may want to extend * to variable-index array dereferences at some point. */ - switch (ir->ir_type) { + switch (ir->get_ir_type()) { case ir_type_expression: case ir_type_texture: break; diff --git a/src/glsl/opt_redundant_jumps.cpp b/src/glsl/opt_redundant_jumps.cpp index ee384d0..19caefc 100644 --- a/src/glsl/opt_redundant_jumps.cpp +++ b/src/glsl/opt_redundant_jumps.cpp @@ -70,8 +70,8 @@ redundant_jumps_visitor::visit_leave(ir_if *ir) if ((last_then == NULL) || (last_else == NULL)) return visit_continue; - if ((last_then->ir_type != ir_type_loop_jump) - || (last_else->ir_type != ir_type_loop_jump)) + if ((last_then->get_ir_type() != ir_type_loop_jump) + || (last_else->get_ir_type() != ir_type_loop_jump)) return visit_continue; ir_loop_jump *const then_jump = (ir_loop_jump *) last_then; @@ -104,7 +104,7 @@ redundant_jumps_visitor::visit_leave(ir_loop *ir) ir_instruction *const last = (ir_instruction *) ir->body_instructions.get_tail(); - if (last && (last->ir_type == ir_type_loop_jump) + if (last && (last->get_ir_type() == ir_type_loop_jump) && (((ir_loop_jump *) last)->mode == ir_loop_jump::jump_continue)) { last->remove(); this->progress = true; diff --git a/src/glsl/opt_structure_splitting.cpp b/src/glsl/opt_structure_splitting.cpp index 1ec537b..de21323 100644 --- a/src/glsl/opt_structure_splitting.cpp +++ b/src/glsl/opt_structure_splitting.cpp @@ -222,7 +222,7 @@ ir_structure_splitting_visitor::get_splitting_entry(ir_variable *var) void ir_structure_splitting_visitor::split_deref(ir_dereference **deref) { - if ((*deref)->ir_type != ir_type_dereference_record) + if ((*deref)->get_ir_type() != ir_type_dereference_record) return; ir_dereference_record *deref_record = (ir_dereference_record *)*deref; diff --git a/src/glsl/opt_vectorize.cpp b/src/glsl/opt_vectorize.cpp index f9a3b61..7a79bfc 100644 --- a/src/glsl/opt_vectorize.cpp +++ b/src/glsl/opt_vectorize.cpp @@ -133,7 +133,7 @@ rewrite_swizzle(ir_instruction *ir, void *data) { ir_swizzle_mask *mask = (ir_swizzle_mask *)data; - switch (ir->ir_type) { + switch (ir->get_ir_type()) { case ir_type_swizzle: { ir_swizzle *swz = (ir_swizzle *)ir; if (swz->val->type->is_vector()) { diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 59cf123..6112449 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -953,7 +953,7 @@ ir_to_mesa_visitor::emit_swz(ir_expression *ir) assert(op->type->is_scalar()); while (op != NULL) { - switch (op->ir_type) { + switch (op->get_ir_type()) { case ir_type_constant: { assert(op->type->is_scalar()); diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 739e108..9d98f5b 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -2179,7 +2179,7 @@ glsl_to_tgsi_visitor::visit(ir_dereference_array *ir) is_2D_input = this->prog->Target == GL_GEOMETRY_PROGRAM_NV && src.file == PROGRAM_INPUT && - ir->array->ir_type != ir_type_dereference_array; + ir->array->get_ir_type() != ir_type_dereference_array; if (is_2D_input) element_size = 1; -- 1.8.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev