radeonsi/nir: create si_nir_opts() helper
authorTimothy Arceri <tarceri@itsqueeze.com>
Thu, 25 Apr 2019 07:02:50 +0000 (17:02 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 30 Apr 2019 23:41:07 +0000 (09:41 +1000)
We will make use of this in the following commit.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_shader.h
src/gallium/drivers/radeonsi/si_shader_nir.c

index f9f81a7bc1ee72983f0bad4c35ba7e8df05291f8..71ce27b2f5536cf98de53d7c5a9e9d82c28039ad 100644 (file)
@@ -710,6 +710,7 @@ void si_nir_scan_shader(const struct nir_shader *nir,
 void si_nir_scan_tess_ctrl(const struct nir_shader *nir,
                           struct tgsi_tessctrl_info *out);
 void si_lower_nir(struct si_shader_selector *sel);
+void si_nir_opts(struct nir_shader *nir);
 
 /* Inline helpers. */
 
index 4fe01ba060798939064ce1cad8a82ecd40ea3f07..87100fbed193aa2029140707a3350525eb6eb8cf 100644 (file)
@@ -811,6 +811,47 @@ void si_nir_scan_shader(const struct nir_shader *nir,
        }
 }
 
+void
+si_nir_opts(struct nir_shader *nir)
+{
+       bool progress;
+       do {
+               progress = false;
+
+               NIR_PASS_V(nir, nir_lower_vars_to_ssa);
+
+               NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
+               NIR_PASS(progress, nir, nir_opt_dead_write_vars);
+
+               NIR_PASS_V(nir, nir_lower_alu_to_scalar);
+               NIR_PASS_V(nir, nir_lower_phis_to_scalar);
+
+               /* (Constant) copy propagation is needed for txf with offsets. */
+               NIR_PASS(progress, nir, nir_copy_prop);
+               NIR_PASS(progress, nir, nir_opt_remove_phis);
+               NIR_PASS(progress, nir, nir_opt_dce);
+               if (nir_opt_trivial_continues(nir)) {
+                       progress = true;
+                       NIR_PASS(progress, nir, nir_copy_prop);
+                       NIR_PASS(progress, nir, nir_opt_dce);
+               }
+               NIR_PASS(progress, nir, nir_opt_if, true);
+               NIR_PASS(progress, nir, nir_opt_dead_cf);
+               NIR_PASS(progress, nir, nir_opt_cse);
+               NIR_PASS(progress, nir, nir_opt_peephole_select, 8, true, true);
+
+               /* Needed for algebraic lowering */
+               NIR_PASS(progress, nir, nir_opt_algebraic);
+               NIR_PASS(progress, nir, nir_opt_constant_folding);
+
+               NIR_PASS(progress, nir, nir_opt_undef);
+               NIR_PASS(progress, nir, nir_opt_conditional_discard);
+               if (nir->options->max_unroll_iterations) {
+                       NIR_PASS(progress, nir, nir_opt_loop_unroll, 0);
+               }
+       } while (progress);
+}
+
 /**
  * Perform "lowering" operations on the NIR that are run once when the shader
  * selector is created.
@@ -861,42 +902,7 @@ si_lower_nir(struct si_shader_selector* sel)
 
        ac_lower_indirect_derefs(sel->nir, sel->screen->info.chip_class);
 
-       bool progress;
-       do {
-               progress = false;
-
-               NIR_PASS_V(sel->nir, nir_lower_vars_to_ssa);
-
-               NIR_PASS(progress, sel->nir, nir_opt_copy_prop_vars);
-               NIR_PASS(progress, sel->nir, nir_opt_dead_write_vars);
-
-               NIR_PASS_V(sel->nir, nir_lower_alu_to_scalar);
-               NIR_PASS_V(sel->nir, nir_lower_phis_to_scalar);
-
-               /* (Constant) copy propagation is needed for txf with offsets. */
-               NIR_PASS(progress, sel->nir, nir_copy_prop);
-               NIR_PASS(progress, sel->nir, nir_opt_remove_phis);
-               NIR_PASS(progress, sel->nir, nir_opt_dce);
-               if (nir_opt_trivial_continues(sel->nir)) {
-                       progress = true;
-                       NIR_PASS(progress, sel->nir, nir_copy_prop);
-                       NIR_PASS(progress, sel->nir, nir_opt_dce);
-               }
-               NIR_PASS(progress, sel->nir, nir_opt_if, true);
-               NIR_PASS(progress, sel->nir, nir_opt_dead_cf);
-               NIR_PASS(progress, sel->nir, nir_opt_cse);
-               NIR_PASS(progress, sel->nir, nir_opt_peephole_select, 8, true, true);
-
-               /* Needed for algebraic lowering */
-               NIR_PASS(progress, sel->nir, nir_opt_algebraic);
-               NIR_PASS(progress, sel->nir, nir_opt_constant_folding);
-
-               NIR_PASS(progress, sel->nir, nir_opt_undef);
-               NIR_PASS(progress, sel->nir, nir_opt_conditional_discard);
-               if (sel->nir->options->max_unroll_iterations) {
-                       NIR_PASS(progress, sel->nir, nir_opt_loop_unroll, 0);
-               }
-       } while (progress);
+       si_nir_opts(sel->nir);
 
        NIR_PASS_V(sel->nir, nir_lower_bool_to_int32);