freedreno/ir3: simplify split from collect
authorRob Clark <robdclark@chromium.org>
Mon, 27 Jan 2020 16:29:35 +0000 (08:29 -0800)
committerMarge Bot <eric+marge@anholt.net>
Sat, 1 Feb 2020 02:40:22 +0000 (02:40 +0000)
In some cases we need to split components out from what was already a
collect.  That was making it hard to DCE unused components of the
collect.  (Ie. unused components of fragcoord, etc)

So just detect this case and skip the chained collect+split.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>

src/freedreno/ir3/ir3_context.c

index 33e73bcb21655f5a31ebe59e5b99a2529221113b..b44dc4a67f338034041e2a536d02391961ed9c5b 100644 (file)
@@ -323,6 +323,16 @@ ir3_split_dest(struct ir3_block *block, struct ir3_instruction **dst,
                return;
        }
 
+       if (src->opc == OPC_META_COLLECT) {
+               debug_assert((base + n) < src->regs_count);
+
+               for (int i = 0; i < n; i++) {
+                       dst[i] = ssa(src->regs[i + base + 1]);
+               }
+
+               return;
+       }
+
        unsigned flags = dest_flags(src);
 
        for (int i = 0, j = 0; i < n; i++) {