Mesa (main): glsl: Delete lower_extracts code

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 16 16:50:11 UTC 2022


Module: Mesa
Branch: main
Commit: 5c90eb1c53f46e86717c6bf4d5253dd23c4dac1f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c90eb1c53f46e86717c6bf4d5253dd23c4dac1f

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue May 10 11:56:35 2022 -0700

glsl: Delete lower_extracts code

The single caller of this function (in st_glsl_to_ir.cpp) always passes
false, so this is dead code.

v2: Delete convert_vec_index_to_cond_assign method because all the
callers are deleted too.

Reviewed-by: Matt Turner <mattst88 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16440>

---

 src/compiler/glsl/ir_optimization.h                |   2 +-
 .../glsl/lower_vec_index_to_cond_assign.cpp        | 122 ++-------------------
 src/compiler/glsl/test_optpass.cpp                 |   2 +-
 src/mesa/state_tracker/st_glsl_to_ir.cpp           |   2 +-
 4 files changed, 12 insertions(+), 116 deletions(-)

diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index 6d86ef400c3..7fc8e036431 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -116,7 +116,7 @@ bool do_minmax_prune(exec_list *instructions);
 bool do_structure_splitting(exec_list *instructions);
 bool optimize_swizzles(exec_list *instructions);
 bool do_tree_grafting(exec_list *instructions);
-bool do_vec_index_to_cond_assign(exec_list *instructions, bool lower_extracts);
+bool do_vec_index_to_cond_assign(exec_list *instructions);
 bool do_vec_index_to_swizzle(exec_list *instructions);
 bool lower_discard(exec_list *instructions);
 void lower_discard_flow(exec_list *instructions);
diff --git a/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp b/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp
index 72658f2f1c1..be1334cc493 100644
--- a/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp
+++ b/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp
@@ -53,17 +53,12 @@ namespace {
 
 class ir_vec_index_to_cond_assign_visitor : public ir_hierarchical_visitor {
 public:
-   ir_vec_index_to_cond_assign_visitor(bool _lower_extracts)
-      : lower_extracts(_lower_extracts), progress(false)
+   ir_vec_index_to_cond_assign_visitor()
+      : progress(false)
    {
       /* empty */
    }
 
-   ir_rvalue *convert_vec_index_to_cond_assign(void *mem_ctx,
-                                               ir_rvalue *orig_vector,
-                                               ir_rvalue *orig_index,
-                                               const glsl_type *type);
-
    ir_rvalue *convert_vector_extract_to_cond_assign(ir_rvalue *ir);
 
    virtual ir_visitor_status visit_enter(ir_expression *);
@@ -73,97 +68,11 @@ public:
    virtual ir_visitor_status visit_enter(ir_call *);
    virtual ir_visitor_status visit_enter(ir_if *);
 
-   bool lower_extracts;
    bool progress;
 };
 
 } /* anonymous namespace */
 
-ir_rvalue *
-ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(void *mem_ctx,
-                                                                      ir_rvalue *orig_vector,
-                                                                      ir_rvalue *orig_index,
-                                                                      const glsl_type *type)
-{
-   exec_list list;
-   ir_factory body(&list, base_ir);
-
-   /* Store the index to a temporary to avoid reusing its tree. */
-   assert(orig_index->type == glsl_type::int_type ||
-          orig_index->type == glsl_type::uint_type);
-   ir_variable *const index =
-      body.make_temp(orig_index->type, "vec_index_tmp_i");
-
-   body.emit(assign(index, orig_index));
-
-   /* Store the value inside a temp, thus avoiding matrixes duplication */
-   ir_variable *const value =
-      body.make_temp(orig_vector->type, "vec_value_tmp");
-
-   body.emit(assign(value, orig_vector));
-
-
-   /* Temporary where we store whichever value we swizzle out. */
-   ir_variable *const var = body.make_temp(type, "vec_index_tmp_v");
-
-   /* Generate a single comparison condition "mask" for all of the components
-    * in the vector.  This will be of the form vec3(i > 0, i > 1, i < 2).
-    */
-   ir_rvalue *const broadcast_index = orig_vector->type->vector_elements > 2
-      ? swizzle(index, SWIZZLE_XXXX, orig_vector->type->vector_elements - 1)
-      : operand(index).val;
-
-   ir_constant_data test_indices_data;
-   memset(&test_indices_data, 0, sizeof(test_indices_data));
-   test_indices_data.i[0] = 0;
-   test_indices_data.i[1] = 1;
-   test_indices_data.i[2] = 2;
-
-   ir_constant *const test_indices =
-      new(mem_ctx) ir_constant(broadcast_index->type, &test_indices_data);
-
-   ir_rvalue *const condition_val = greater(broadcast_index, test_indices);
-
-   ir_variable *const cond = body.make_temp(condition_val->type,
-                                            "dereference_condition");
-
-   body.emit(assign(cond, condition_val));
-
-
-   /* Generate a series of conditional selections to pick the right element. */
-   assert(orig_vector->type->vector_elements <= 4 &&
-          orig_vector->type->vector_elements >= 2);
-
-   ir_rvalue *rhs = csel(swizzle(cond, 0, 1),
-                         swizzle(value, 1, 1),
-                         swizzle(value, 0, 1));
-
-   if (orig_vector->type->vector_elements > 2) {
-      ir_rvalue *tmp;
-
-      if (orig_vector->type->vector_elements > 3) {
-         tmp = csel(swizzle(cond, 2, 1),
-                    swizzle(value, 3, 1),
-                    swizzle(value, 2, 1));
-
-      } else {
-         tmp = swizzle(value, 2, 1);
-      }
-
-      rhs = csel(swizzle(cond, 1, 1), tmp, rhs);
-   }
-
-   body.emit(assign(var, rhs));
-
-   /* Put all of the new instructions in the IR stream before the old
-    * instruction.
-    */
-   base_ir->insert_before(&list);
-
-   this->progress = true;
-   return deref(var).val;
-}
-
 ir_rvalue *
 ir_vec_index_to_cond_assign_visitor::convert_vector_extract_to_cond_assign(ir_rvalue *ir)
 {
@@ -192,26 +101,13 @@ ir_vec_index_to_cond_assign_visitor::convert_vector_extract_to_cond_assign(ir_rv
          new(base_ir) ir_expression(expr->operation, vec_input->type,
                                     vec_input, expr->operands[1]);
 
-      if (lower_extracts) {
-         return convert_vec_index_to_cond_assign(ralloc_parent(ir),
-                                                 vec_interpolate,
-                                                 interpolant->operands[1],
-                                                 ir->type);
-      } else {
-         this->progress = true;
-         return new(base_ir) ir_expression(ir_binop_vector_extract, ir->type,
-                                           vec_interpolate,
-                                           interpolant->operands[1]);
-      }
+      this->progress = true;
+      return new(base_ir) ir_expression(ir_binop_vector_extract, ir->type,
+                                        vec_interpolate,
+                                        interpolant->operands[1]);
    }
 
-   if (!lower_extracts || expr->operation != ir_binop_vector_extract)
-      return ir;
-
-   return convert_vec_index_to_cond_assign(ralloc_parent(ir),
-                                           expr->operands[0],
-                                           expr->operands[1],
-                                           ir->type);
+   return ir;
 }
 
 ir_visitor_status
@@ -275,9 +171,9 @@ ir_vec_index_to_cond_assign_visitor::visit_enter(ir_if *ir)
 }
 
 bool
-do_vec_index_to_cond_assign(exec_list *instructions, bool lower_extracts)
+do_vec_index_to_cond_assign(exec_list *instructions)
 {
-   ir_vec_index_to_cond_assign_visitor v(lower_extracts);
+   ir_vec_index_to_cond_assign_visitor v;
 
    visit_list_elements(&v, instructions);
 
diff --git a/src/compiler/glsl/test_optpass.cpp b/src/compiler/glsl/test_optpass.cpp
index 7b0bb8a8003..0575484c868 100644
--- a/src/compiler/glsl/test_optpass.cpp
+++ b/src/compiler/glsl/test_optpass.cpp
@@ -102,7 +102,7 @@ do_optimization(struct exec_list *ir, const char *optimization,
    } else if (strcmp(optimization, "do_tree_grafting") == 0) {
       return do_tree_grafting(ir);
    } else if (strcmp(optimization, "do_vec_index_to_cond_assign") == 0) {
-      return do_vec_index_to_cond_assign(ir, true);
+      return do_vec_index_to_cond_assign(ir);
    } else if (strcmp(optimization, "do_vec_index_to_swizzle") == 0) {
       return do_vec_index_to_swizzle(ir);
    } else if (strcmp(optimization, "lower_discard") == 0) {
diff --git a/src/mesa/state_tracker/st_glsl_to_ir.cpp b/src/mesa/state_tracker/st_glsl_to_ir.cpp
index 130f8c82682..769226065dc 100644
--- a/src/mesa/state_tracker/st_glsl_to_ir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp
@@ -130,7 +130,7 @@ link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
                             IMUL_HIGH_TO_MUL
                           : 0));
 
-      do_vec_index_to_cond_assign(ir, false);
+      do_vec_index_to_cond_assign(ir);
       lower_vector_insert(ir, true);
       if (options->MaxIfDepth == 0) {
          lower_discard(ir);



More information about the mesa-commit mailing list