glsl: Just access the ir_expression_operation strings table directly
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 16 Apr 2015 00:55:32 +0000 (17:55 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 30 Aug 2016 23:28:00 +0000 (16:28 -0700)
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 <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/compiler/glsl/ir.cpp
src/compiler/glsl/ir.h
src/compiler/glsl/ir_expression_operation.py
src/compiler/glsl/ir_print_visitor.cpp
src/compiler/glsl/lower_mat_op_to_vec.cpp

index f6118a1a5f85c0b7999adbed156660c6cdf88c5c..cb195b21ad6f0ade44e9e61a93f11312108ea083 100644 (file)
@@ -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;
index 5e1e9bf34c7ac7cf7ea01239c73006cc5bb01fbf..a3b1a50229fcdb389cbbe0729151739ac60688ce 100644 (file)
@@ -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,
@@ -1429,17 +1431,6 @@ public:
              operation == ir_quadop_vector;
    }
 
-   /**
-    * 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.
     */
index 8b55c282cffe47f22cc688c2b6de9a778067f36e..8e2dd27d9eb1f95ac1d2032a7a7eb4b5eb60ba71 100644 (file)
@@ -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]}",
index 4cb8069a56fa2d1c5cf42c17c7271eb7bf1c11a9..fc01be935bf5ef2aa92b154f9edad39d70ac0e4e 100644 (file)
@@ -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);
index 266fdc6a250eb8cfc5375f91989f7ba3fbed91fb..9a27029de31f2ba76465f90b771f8d5d45f95fce 100644 (file)
@@ -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();