pan/midgard: Fix load/store pairing

This used a delicate hack to try to find indirect inputs and skip them
as candidates for pairing. Let's use a better criterion -- no sources --
and pair based on that.

We could do better, but that would require more complex data flow
analysis than we're interested in doing here.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig
2019-08-09 08:56:44 -07:00
parent 15954ab6ca
commit c690b37d76
+6 -9
View File
@@ -622,18 +622,15 @@ midgard_pair_load_store(compiler_context *ctx, midgard_block *block)
if (c->type != TAG_LOAD_STORE_4) continue;
/* Stores cannot be reordered, since they have
* dependencies. For the same reason, indirect
* loads cannot be reordered as their index is
* loaded in r27.w */
/* We can only reorder if there are no sources */
if (OP_IS_STORE(c->load_store.op)) continue;
bool deps = false;
/* It appears the 0x8 bit is set whenever a
* load is direct, unset when it is indirect.
* Skip indirect loads. */
for (unsigned s = 0; s < ARRAY_SIZE(ins->ssa_args.src); ++s)
deps |= (c->ssa_args.src[s] != -1);
if (!(c->load_store.arg_2 & 0x8)) continue;
if (deps)
continue;
/* We found one! Move it up to pair and remove it from the old location */