pan/midgard: Simplify and fix vector copyprop
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 6 Dec 2019 22:11:44 +0000 (17:11 -0500)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 12 Dec 2019 16:42:07 +0000 (11:42 -0500)
Fixes a regression in QuakeSpasm. See
https://gitlab.freedesktop.org/mesa/mesa/issues/2169 for apitrace.

Closes #2169

Fixes: f72873e6aa0 ("pan/midgard: Copypropagate vector creation")
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reported-by: Icecream95
src/panfrost/midgard/midgard_opt_copy_prop.c

index 242db1eae2de170aacabc111e8037efa8749eda2..ca4f78f9a330806c305e082e8395b469a807812e 100644 (file)
@@ -46,22 +46,13 @@ midgard_opt_copy_prop_reg(compiler_context *ctx, midgard_block *block)
                 if (ins->has_constants) continue;
                 if (mir_nontrivial_source2_mod(ins)) continue;
                 if (mir_nontrivial_outmod(ins)) continue;
-                if (!mir_single_use(ctx, ins->src[1])) continue;
+                if (!mir_single_use(ctx, from)) continue;
 
-                bool bad = false;
+                /* Ensure mask is continguous from 0 */
+                if (!(ins->mask & (1 << COMPONENT_X))) continue;
+                if (ins->mask & (ins->mask + 1)) continue;
 
-                mir_foreach_instr_global(ctx, c) {
-                        if (mir_has_arg(c, ins->src[1])) {
-                                if (ins->mask != c->mask)
-                                        bad = true;
-                        }
-                }
-
-                if (bad)
-                        continue;
-
-
-                mir_rewrite_index_dst(ctx, ins->src[1], ins->dest);
+                mir_rewrite_index_dst(ctx, from, ins->dest);
                 mir_remove_instruction(ins);
                 progress |= true;
         }