mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 07:48:07 +02:00
freedreno/ir3: remove extra nops inserted in scheduler
They were inserting a nop between back to back SFU instrucions. But that doesn't actually appear to be required. And they get stripped out later anyways before legalize. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4071>
This commit is contained in:
parent
ad2ff7a278
commit
64ae2ef8bb
2 changed files with 0 additions and 25 deletions
|
|
@ -79,24 +79,11 @@ struct ir3_postsched_node {
|
|||
#define foreach_bit(b, mask) \
|
||||
for (uint32_t _m = ({debug_assert((mask) >= 1); (mask);}); _m && ({(b) = u_bit_scan(&_m); 1;});)
|
||||
|
||||
// TODO deduplicate
|
||||
static bool is_sfu_or_mem(struct ir3_instruction *instr)
|
||||
{
|
||||
return is_sfu(instr) || is_mem(instr);
|
||||
}
|
||||
|
||||
static void
|
||||
schedule(struct ir3_postsched_ctx *ctx, struct ir3_instruction *instr)
|
||||
{
|
||||
debug_assert(ctx->block == instr->block);
|
||||
|
||||
/* maybe there is a better way to handle this than just stuffing
|
||||
* a nop.. ideally we'd know about this constraint in the
|
||||
* scheduling and depth calculation..
|
||||
*/
|
||||
if (ctx->scheduled && is_sfu_or_mem(ctx->scheduled) && is_sfu_or_mem(instr))
|
||||
ir3_NOP(ctx->block);
|
||||
|
||||
/* remove from unscheduled_list:
|
||||
*/
|
||||
list_delinit(&instr->node);
|
||||
|
|
|
|||
|
|
@ -85,11 +85,6 @@ static bool is_scheduled(struct ir3_instruction *instr)
|
|||
return !!(instr->flags & IR3_INSTR_MARK);
|
||||
}
|
||||
|
||||
static bool is_sfu_or_mem(struct ir3_instruction *instr)
|
||||
{
|
||||
return is_sfu(instr) || is_mem(instr);
|
||||
}
|
||||
|
||||
static void
|
||||
unuse_each_src(struct ir3_sched_ctx *ctx, struct ir3_instruction *instr)
|
||||
{
|
||||
|
|
@ -226,13 +221,6 @@ schedule(struct ir3_sched_ctx *ctx, struct ir3_instruction *instr)
|
|||
{
|
||||
debug_assert(ctx->block == instr->block);
|
||||
|
||||
/* maybe there is a better way to handle this than just stuffing
|
||||
* a nop.. ideally we'd know about this constraint in the
|
||||
* scheduling and depth calculation..
|
||||
*/
|
||||
if (ctx->scheduled && is_sfu_or_mem(ctx->scheduled) && is_sfu_or_mem(instr))
|
||||
ir3_NOP(ctx->block);
|
||||
|
||||
/* remove from depth list:
|
||||
*/
|
||||
list_delinit(&instr->node);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue