Mesa (master): Revert "panfrost/midgard: Extend copy propagation pass"

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sun Apr 28 21:41:47 UTC 2019


Module: Mesa
Branch: master
Commit: a3d6a3dfc43871db34e68d6209f6f47917828455
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3d6a3dfc43871db34e68d6209f6f47917828455

Author: Alyssa Rosenzweig <alyssa at rosenzweig.io>
Date:   Sat Apr 27 23:46:38 2019 +0000

Revert "panfrost/midgard: Extend copy propagation pass"

Fixes: commit b53b4573c3f0571253672e44ce7d6310d9f987bf.

Optimization gone wrong. In the future, we should try this again (it's a
net win if implemented right), but at the moment this just regresses.

Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>

---

 .../drivers/panfrost/midgard/midgard_compile.c     | 56 ++++------------------
 1 file changed, 8 insertions(+), 48 deletions(-)

diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c
index 742217c5a97..0a9978655a7 100644
--- a/src/gallium/drivers/panfrost/midgard/midgard_compile.c
+++ b/src/gallium/drivers/panfrost/midgard/midgard_compile.c
@@ -3140,36 +3140,6 @@ midgard_opt_dead_code_eliminate(compiler_context *ctx, midgard_block *block)
         return progress;
 }
 
-/* Combines the two outmods if possible. Returns whether the combination was
- * successful */
-
-static bool
-midgard_combine_outmod(midgard_outmod *main, midgard_outmod overlay)
-{
-        if (overlay == midgard_outmod_none)
-                return true;
-
-        if (*main == overlay)
-                return true;
-
-        if (*main == midgard_outmod_none) {
-                *main = overlay;
-                return true;
-        }
-
-        if (*main == midgard_outmod_pos && overlay == midgard_outmod_sat) {
-                *main = midgard_outmod_sat;
-                return true;
-        }
-
-        if (overlay == midgard_outmod_pos && *main == midgard_outmod_sat) {
-                *main = midgard_outmod_sat;
-                return true;
-        }
-
-        return false;
-}
-
 static bool
 midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
 {
@@ -3186,12 +3156,8 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
 
                 if (to >= SSA_FIXED_MINIMUM) continue;
                 if (from >= SSA_FIXED_MINIMUM) continue;
-                if (to >= ctx->func->impl->ssa_alloc) continue;
-                if (from >= ctx->func->impl->ssa_alloc) continue;
 
-                /* Also, if the move has source side effects, we're not sure
-                 * what to do. Destination side effects we can handle, though.
-                 */
+                /* Also, if the move has side effects, we're helpless */
 
                 midgard_vector_alu_src src =
                         vector_alu_from_unsigned(ins->alu.src2);
@@ -3200,23 +3166,17 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
 
                 if (mir_nontrivial_mod(src, is_int, mask)) continue;
 
-                mir_foreach_instr_in_block_from_rev(block, v, mir_prev_op(ins)) {
-                        if (v->ssa_args.dest == from) {
-                                if (v->type == TAG_ALU_4) {
-                                        midgard_outmod final = v->alu.outmod;
-
-                                        if (!midgard_combine_outmod(&final, ins->alu.outmod))
-                                                continue;
-
-                                        v->alu.outmod = final;
-                                }
+                mir_foreach_instr_in_block_from(block, v, mir_next_op(ins)) {
+                        if (v->ssa_args.src0 == to) {
+                                v->ssa_args.src0 = from;
+                                progress = true;
+                        }
 
-                                v->ssa_args.dest = to;
+                        if (v->ssa_args.src1 == to && !v->ssa_args.inline_constant) {
+                                v->ssa_args.src1 = from;
                                 progress = true;
                         }
                 }
-
-                mir_remove_instruction(ins);
         }
 
         return progress;




More information about the mesa-commit mailing list