freedreno/ir3: remove extra nops inserted in scheduler
authorRob Clark <robdclark@chromium.org>
Tue, 25 Feb 2020 18:42:57 +0000 (10:42 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 10 Mar 2020 16:01:39 +0000 (16:01 +0000)
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>

src/freedreno/ir3/ir3_postsched.c
src/freedreno/ir3/ir3_sched.c

index 47a8e52fdeb884a5c657a7f4621bd5360aaee24b..1e706f75a24844ff34325f0884221a8ee830fd1c 100644 (file)
@@ -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);
index 78f79df7e4e7f5504af86a4c62a188531703df51..9c8d3572a23100b4ed92512b45e52e1ba4843e7d 100644 (file)
@@ -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);