Mesa (master): freedreno: Enable the nir_opt_algebraic_late() pass.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Sep 30 10:02:35 UTC 2019
Module: Mesa
Branch: master
Commit: 10e508c8156785e6481bff37b3446c347aa56fea
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10e508c8156785e6481bff37b3446c347aa56fea
Author: Daniel Schürmann <daniel at schuermann.dev>
Date: Fri Sep 27 12:49:06 2019 +0200
freedreno: Enable the nir_opt_algebraic_late() pass.
Reviewed-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>
---
src/freedreno/ir3/ir3_nir.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c
index 0a62523ccce..9342c9d299b 100644
--- a/src/freedreno/ir3/ir3_nir.c
+++ b/src/freedreno/ir3/ir3_nir.c
@@ -263,6 +263,20 @@ ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s,
if (ubo_progress || idiv_progress)
ir3_optimize_loop(s);
+ /* Do late algebraic optimization to turn add(a, neg(b)) back into
+ * subs, then the mandatory cleanup after algebraic. Note that it may
+ * produce fnegs, and if so then we need to keep running to squash
+ * fneg(fneg(a)).
+ */
+ bool more_late_algebraic = true;
+ while (more_late_algebraic) {
+ more_late_algebraic = OPT(s, nir_opt_algebraic_late);
+ OPT_V(s, nir_opt_constant_folding);
+ OPT_V(s, nir_copy_prop);
+ OPT_V(s, nir_opt_dce);
+ OPT_V(s, nir_opt_cse);
+ }
+
OPT_V(s, nir_remove_dead_variables, nir_var_function_temp);
OPT_V(s, nir_opt_sink, nir_move_const_undef);
More information about the mesa-commit
mailing list