From: Alyssa Rosenzweig Date: Fri, 6 Dec 2019 22:11:44 +0000 (-0500) Subject: pan/midgard: Simplify and fix vector copyprop X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05b839f3545b5bf8a4c22ee6db0ad66d2b6bbc16;p=mesa.git pan/midgard: Simplify and fix vector copyprop 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 Reported-by: Icecream95 --- diff --git a/src/panfrost/midgard/midgard_opt_copy_prop.c b/src/panfrost/midgard/midgard_opt_copy_prop.c index 242db1eae2d..ca4f78f9a33 100644 --- a/src/panfrost/midgard/midgard_opt_copy_prop.c +++ b/src/panfrost/midgard/midgard_opt_copy_prop.c @@ -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; }