Module: Mesa Branch: main Commit: e46ec44a51769a1161fc08b5dade31f465182d80 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e46ec44a51769a1161fc08b5dade31f465182d80
Author: Alyssa Rosenzweig <[email protected]> Date: Thu Jul 8 17:32:28 2021 -0400 pan/bi: Handle 4-src instructions in scheduler Spill to a move. This allows us to emit SHADDX and general CSEL. Signed-off-by: Alyssa Rosenzweig <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10961> --- src/panfrost/bifrost/bi_schedule.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/panfrost/bifrost/bi_schedule.c b/src/panfrost/bifrost/bi_schedule.c index 3321e0a101d..e4099174004 100644 --- a/src/panfrost/bifrost/bi_schedule.c +++ b/src/panfrost/bifrost/bi_schedule.c @@ -833,8 +833,12 @@ bi_instr_schedulable(bi_instr *instr, unsigned total_srcs = tuple->reg.nr_reads + unique_new_srcs; - /* TODO: spill to moves */ - if (total_srcs > 3) + bool can_spill_to_moves = (!tuple->add); + can_spill_to_moves &= (bi_nconstants(clause) < 13 - (clause->tuple_count + 2)); + can_spill_to_moves &= (clause->tuple_count < 7); + + /* However, we can get an extra 1 or 2 sources by inserting moves */ + if (total_srcs > (can_spill_to_moves ? 4 : 3)) return false; /* Count effective reads for the successor */ @@ -924,6 +928,21 @@ bi_take_instr(bi_context *ctx, struct bi_worklist st, else if (tuple->add && tuple->add->table) return bi_lower_dtsel(ctx, clause, tuple); + /* TODO: Optimize these moves */ + if (!fma && tuple->nr_prev_reads > 3) { + /* Only spill by one source for now */ + assert(tuple->nr_prev_reads == 4); + + /* Pick a source to spill */ + bi_index src = tuple->prev_reads[0]; + + /* Schedule the spill */ + bi_builder b = bi_init_builder(ctx, bi_before_tuple(tuple->prev)); + bi_instr *mov = bi_mov_i32_to(&b, src, src); + bi_pop_instr(clause, tuple, mov, live_after_temp, fma); + return mov; + } + #ifndef NDEBUG /* Don't pair instructions if debugging */ if ((bifrost_debug & BIFROST_DBG_NOSCHED) && tuple->add) _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
