pan/bi: Measure backwards branches as well
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 28 May 2020 19:01:14 +0000 (15:01 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 29 May 2020 20:34:56 +0000 (20:34 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5260>

src/panfrost/bifrost/bi_layout.c

index 77e97e85ee94aa625dfb38fcc382a37ecd319814..c00cdc760fe0c45aa1ede077f6aa98afb802ada2 100644 (file)
@@ -130,7 +130,32 @@ bi_block_offset(bi_context *ctx, bi_clause *start, bi_block *target)
                         }
                 }
         } else {
-                unreachable("Backwards branching is to-do");
+                /* We start at the beginning of the clause but have to jump
+                 * through the clauses before us in the block */
+                bi_foreach_clause_in_block_from_rev(start->block, clause, start) {
+                        if (clause == start)
+                                continue;
+
+                        ret -= bi_clause_quadwords(clause);
+                }
+
+                /* And jump back every clause of preceding blocks up through
+                 * and including the target to get to the beginning of the
+                 * target */
+                bi_foreach_block_from_rev(ctx, start->block, _blk) {
+                        bi_block *blk = (bi_block *) _blk;
+
+                        if (blk == start->block)
+                                continue;
+
+                        bi_foreach_clause_in_block(blk, clause) {
+                                ret -= bi_clause_quadwords(clause);
+                        }
+
+                        /* End just after the target */
+                        if (blk == target)
+                                break;
+                }
         }
 
         return ret;