From: Alyssa Rosenzweig Date: Thu, 28 May 2020 19:01:14 +0000 (-0400) Subject: pan/bi: Measure backwards branches as well X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=db2c10d0325cc9c127209b11b8c36f2e5625d185;p=mesa.git pan/bi: Measure backwards branches as well Signed-off-by: Alyssa Rosenzweig Part-of: --- diff --git a/src/panfrost/bifrost/bi_layout.c b/src/panfrost/bifrost/bi_layout.c index 77e97e85ee9..c00cdc760fe 100644 --- a/src/panfrost/bifrost/bi_layout.c +++ b/src/panfrost/bifrost/bi_layout.c @@ -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;