pan/midgard: Don't try to OR live_in of successors
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 3 Oct 2019 20:13:13 +0000 (16:13 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 4 Oct 2019 02:29:50 +0000 (22:29 -0400)
By definition, once liveness analysis has occurred:

   live_out = OR {succ} succ->live_in

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/midgard/midgard_ra.c

index 211c4f4d4974fd0c31673a7e37d0054f80feea83..dacc0d9106e950be50c8251b4ce5fb70e05149a1 100644 (file)
@@ -26,6 +26,7 @@
 #include "midgard_ops.h"
 #include "util/register_allocate.h"
 #include "util/u_math.h"
+#include "util/u_memory.h"
 
 /* For work registers, we can subdivide in various ways. So we create
  * classes for the various sizes and conflict accordingly, keeping in
@@ -553,12 +554,7 @@ mir_compute_interference(
          * end of each block and walk the block backwards. */
 
         mir_foreach_block(ctx, blk) {
-                uint8_t *live = calloc(ctx->temp_count, 1);
-
-                mir_foreach_successor(blk, succ) {
-                        for (unsigned i = 0; i < ctx->temp_count; ++i)
-                                live[i] |= succ->live_in[i];
-                }
+                uint8_t *live = mem_dup(blk->live_out, ctx->temp_count * sizeof(uint8_t));
 
                 mir_foreach_instr_in_block_rev(blk, ins) {
                         /* Mark all registers live after the instruction as