From: Rob Clark Date: Tue, 25 Feb 2020 18:42:57 +0000 (-0800) Subject: freedreno/ir3: remove extra nops inserted in scheduler X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=64ae2ef8bbc63750346345e331750f0e0c643103;p=mesa.git 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 Part-of: --- diff --git a/src/freedreno/ir3/ir3_postsched.c b/src/freedreno/ir3/ir3_postsched.c index 47a8e52fdeb..1e706f75a24 100644 --- a/src/freedreno/ir3/ir3_postsched.c +++ b/src/freedreno/ir3/ir3_postsched.c @@ -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); diff --git a/src/freedreno/ir3/ir3_sched.c b/src/freedreno/ir3/ir3_sched.c index 78f79df7e4e..9c8d3572a23 100644 --- a/src/freedreno/ir3/ir3_sched.c +++ b/src/freedreno/ir3/ir3_sched.c @@ -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);