[Mesa-dev] [PATCH 00/22] Send ir_assignment::condition to the Upside Down
Ian Romanick
idr at freedesktop.org
Thu Sep 21 14:34:13 UTC 2017
From: Ian Romanick <ian.d.romanick at intel.com>
I have also pushed this series to
https://cgit.freedesktop.org/~idr/mesa/log/?h=remove-ir_assignment-condition
I think -201 lines speaks for itself, but...
The condition field pre-dates the ir_triop_csel operation by a few
years. The idea was that any assignment could be made conditional so
that platforms that didn't have flow control could replace an
if-statement with a bunch of conditional assignments. However, handling
this condition is really annoying in most optimization passes, so most
passes bail as soon as a condition is encountered.
Much later in development, ir_triop_csel was added. For the most part,
a conditional assignment is equivalent to a conditional select where the
"false" value is the destination variable.
My main motivation for this series is that I didn't want to deal with
ir_assignment::condition in the SPIR-V generator work. That I was able
to delete a pile of code is a happy bonus.
There are two odd bits that may warrant a bit closer examination:
- Patch 6 changes the code that is generated for non-constant vector
indexing, and that results in some shader-db changes. Most of the
changes are small (+1 instruction in a program), but some are more
substantial.
- Patch 18 moves the 'foo = foo;' optimization from one optimization
pass to another. If we just eliminate that optimization altogether,
shader-db results, even on platforms that use NIR, are hurt quite
substantially. I have not investigated why NIR isn't picking up the
slack here.
Ian Romanick (22):
glsl: Fix coding standards issues in lower_if_to_cond_assign
glsl: Lower ifs to conditional-select instead of conditional-assign
glsl: Fix coding standards issues in lower_vec_index_to_cond_assign
glsl: Return ir_variable from compare_index_block
glsl: Convert lower_vec_index_to_cond_assign to using ir_builder
glsl: Lower vector indexing to conditional-select instead of
conditional-assign
glsl: Fix coding standards issues in
lower_variable_index_to_cond_assign
glsl: Convert lower_variable_index_to_cond_assign to ir_builder
glsl: Lower array indexing to conditional-select instead of
conditional-assign
glsl: Don't pass NULL to ir_assignment constructor when not necessary
glsl/ast: Use ir_binop_equal instead of ir_binop_all_equal
glsl/ast: Convert ast_case_label::hir to ir_builder
glsl/ast: Explicitly track the set of case labels that occur after
default
glsl/ast: Generate a more compact expression to disable execution of
default case
glsl/ast: Use logical-or instead of conditional assignment to set
fallthru_var
glsl: Eliminate ir_builder assign overloads that have a condition
glsl: Eliminate ir_assignment constructors that have a condition
glsl: Move 'foo = foo;' optimization to opt_dead_code_local
glsl: Kill ir_assignment::condition with fire
glsl: Fix indentation left weird from the previous commit
glsl: Remove spurious assertions
glsl: Simplify ir_assignment::clone
src/compiler/glsl/ast_function.cpp | 37 ++-
src/compiler/glsl/ast_to_hir.cpp | 152 ++++++-----
src/compiler/glsl/glsl_to_nir.cpp | 16 +-
src/compiler/glsl/ir.cpp | 18 +-
src/compiler/glsl/ir.h | 11 +-
src/compiler/glsl/ir_builder.cpp | 15 +-
src/compiler/glsl/ir_builder.h | 2 -
.../glsl/ir_builder_print_visitor.cpp | 4 -
src/compiler/glsl/ir_clone.cpp | 14 +-
src/compiler/glsl/ir_constant_expression.cpp | 12 +-
.../glsl/ir_expression_flattening.cpp | 4 +-
src/compiler/glsl/ir_hv_accept.cpp | 3 -
src/compiler/glsl/ir_optimization.h | 8 +-
src/compiler/glsl/ir_print_visitor.cpp | 3 -
src/compiler/glsl/ir_reader.cpp | 3 +-
src/compiler/glsl/ir_rvalue_visitor.cpp | 2 -
src/compiler/glsl/loop_analysis.cpp | 3 +-
src/compiler/glsl/loop_controls.cpp | 2 +-
src/compiler/glsl/lower_discard.cpp | 4 +-
src/compiler/glsl/lower_distance.cpp | 2 +-
src/compiler/glsl/lower_if_to_cond_assign.cpp | 91 +++----
src/compiler/glsl/lower_instructions.cpp | 4 +-
src/compiler/glsl/lower_jumps.cpp | 11 +-
src/compiler/glsl/lower_mat_op_to_vec.cpp | 2 +-
.../glsl/lower_texture_projection.cpp | 2 +-
.../lower_variable_index_to_cond_assign.cpp | 253 +++++++-----------
.../glsl/lower_vec_index_to_cond_assign.cpp | 105 ++++----
src/compiler/glsl/lower_vector.cpp | 4 +-
src/compiler/glsl/opt_array_splitting.cpp | 10 +-
src/compiler/glsl/opt_constant_folding.cpp | 17 --
.../glsl/opt_constant_propagation.cpp | 3 -
src/compiler/glsl/opt_constant_variable.cpp | 3 -
src/compiler/glsl/opt_copy_propagation.cpp | 24 +-
.../glsl/opt_copy_propagation_elements.cpp | 3 -
.../glsl/opt_dead_builtin_varyings.cpp | 1 -
src/compiler/glsl/opt_dead_code_local.cpp | 180 +++++++------
src/compiler/glsl/opt_function_inlining.cpp | 11 +-
src/compiler/glsl/opt_structure_splitting.cpp | 11 +-
src/compiler/glsl/opt_tree_grafting.cpp | 3 +-
src/compiler/glsl/opt_vectorize.cpp | 3 +-
src/mesa/program/ir_to_mesa.cpp | 24 +-
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 +-
42 files changed, 448 insertions(+), 649 deletions(-)
--
2.9.5
More information about the mesa-dev
mailing list