diff options
author | Ian Romanick <[email protected]> | 2015-04-15 17:55:32 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2016-08-30 16:28:00 -0700 |
commit | c6e8fd82ea118c66e69e4ad7967faec0715741aa (patch) | |
tree | 548a68d7abea31fc0f46ed2b093e249236d77a1b | |
parent | fb44f69779ed7497768421ccd60e73cc707ffe69 (diff) |
glsl: Just access the ir_expression_operation strings table directly
The operator_string functions gave us some protection against a
malformed table. Now that the table is generated from the same data
that generates the enum, this is not a concern. Just cut out the middle
man.
text data bss dec hex filename
7531892 273992 28584 7834468 778b64 i965_dri-64bit-before.so
7531828 273992 28584 7834404 778b24 i965_dri-64bit-after.so
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
-rw-r--r-- | src/compiler/glsl/ir.cpp | 17 | ||||
-rw-r--r-- | src/compiler/glsl/ir.h | 13 | ||||
-rw-r--r-- | src/compiler/glsl/ir_expression_operation.py | 2 | ||||
-rw-r--r-- | src/compiler/glsl/ir_print_visitor.cpp | 2 | ||||
-rw-r--r-- | src/compiler/glsl/lower_mat_op_to_vec.cpp | 2 |
5 files changed, 7 insertions, 29 deletions
diff --git a/src/compiler/glsl/ir.cpp b/src/compiler/glsl/ir.cpp index f6118a1a5f8..cb195b21ad6 100644 --- a/src/compiler/glsl/ir.cpp +++ b/src/compiler/glsl/ir.cpp @@ -500,18 +500,6 @@ ir_expression::get_num_operands(ir_expression_operation op) #include "ir_expression_operation_strings.h" -const char *ir_expression::operator_string(ir_expression_operation op) -{ - assert((unsigned int) op < ARRAY_SIZE(operator_strs)); - assert(ARRAY_SIZE(operator_strs) == (ir_quadop_vector + 1)); - return operator_strs[op]; -} - -const char *ir_expression::operator_string() -{ - return operator_string(this->operation); -} - const char* depth_layout_string(ir_depth_layout layout) { @@ -531,9 +519,8 @@ depth_layout_string(ir_depth_layout layout) ir_expression_operation ir_expression::get_operator(const char *str) { - const int operator_count = sizeof(operator_strs) / sizeof(operator_strs[0]); - for (int op = 0; op < operator_count; op++) { - if (strcmp(str, operator_strs[op]) == 0) + for (int op = 0; op <= int(ir_last_opcode); op++) { + if (strcmp(str, ir_expression_operation_strings[op]) == 0) return (ir_expression_operation) op; } return (ir_expression_operation) -1; diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h index 5e1e9bf34c7..a3b1a50229f 100644 --- a/src/compiler/glsl/ir.h +++ b/src/compiler/glsl/ir.h @@ -1363,6 +1363,8 @@ public: #include "ir_expression_operation.h" +extern const char *const ir_expression_operation_strings[ir_last_opcode + 1]; + class ir_expression : public ir_rvalue { public: ir_expression(int op, const struct glsl_type *type, @@ -1430,17 +1432,6 @@ public: } /** - * Return a string representing this expression's operator. - */ - const char *operator_string(); - - /** - * Return a string representing this expression's operator. - */ - static const char *operator_string(ir_expression_operation); - - - /** * Do a reverse-lookup to translate the given string into an operator. */ static ir_expression_operation get_operator(const char *); diff --git a/src/compiler/glsl/ir_expression_operation.py b/src/compiler/glsl/ir_expression_operation.py index 8b55c282cff..8e2dd27d9eb 100644 --- a/src/compiler/glsl/ir_expression_operation.py +++ b/src/compiler/glsl/ir_expression_operation.py @@ -365,7 +365,7 @@ ${item} };""") strings_template = mako.template.Template(copyright + """ -static const char *const operator_strs[] = { +const char *const ir_expression_operation_strings[] = { % for item in values: % if not isinstance(item, str): "${item[2] if item[2] is not None else item[0]}", diff --git a/src/compiler/glsl/ir_print_visitor.cpp b/src/compiler/glsl/ir_print_visitor.cpp index 4cb8069a56f..fc01be935bf 100644 --- a/src/compiler/glsl/ir_print_visitor.cpp +++ b/src/compiler/glsl/ir_print_visitor.cpp @@ -255,7 +255,7 @@ void ir_print_visitor::visit(ir_expression *ir) print_type(f, ir->type); - fprintf(f, " %s ", ir->operator_string()); + fprintf(f, " %s ", ir_expression_operation_strings[ir->operation]); for (unsigned i = 0; i < ir->get_num_operands(); i++) { ir->operands[i]->accept(this); diff --git a/src/compiler/glsl/lower_mat_op_to_vec.cpp b/src/compiler/glsl/lower_mat_op_to_vec.cpp index 266fdc6a250..9a27029de31 100644 --- a/src/compiler/glsl/lower_mat_op_to_vec.cpp +++ b/src/compiler/glsl/lower_mat_op_to_vec.cpp @@ -428,7 +428,7 @@ ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign) default: printf("FINISHME: Handle matrix operation for %s\n", - orig_expr->operator_string()); + ir_expression_operation_strings[orig_expr->operation]); abort(); } orig_assign->remove(); |