diff options
-rw-r--r-- | src/panfrost/midgard/midgard_schedule.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index 7ed36a5e739..d5fd17bc6db 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -654,6 +654,7 @@ static unsigned mir_comparison_mobile( compiler_context *ctx, midgard_instruction **instructions, + struct midgard_predicate *predicate, unsigned count, unsigned cond) { @@ -676,9 +677,9 @@ mir_comparison_mobile( if (GET_CHANNEL_COUNT(alu_opcode_props[instructions[i]->alu.op].props)) return ~0; - /* TODO: moving conditionals with constants */ + /* Ensure it will fit with constants */ - if (instructions[i]->has_constants) + if (!mir_adjust_constants(instructions[i], predicate, false)) return ~0; /* Ensure it is written only once */ @@ -689,6 +690,10 @@ mir_comparison_mobile( ret = i; } + /* Inject constants now that we are sure we want to */ + if (ret != ~0) + mir_adjust_constants(instructions[ret], predicate, true); + return ret; } @@ -700,6 +705,7 @@ static midgard_instruction * mir_schedule_comparison( compiler_context *ctx, midgard_instruction **instructions, + struct midgard_predicate *predicate, BITSET_WORD *worklist, unsigned count, unsigned cond, bool vector, unsigned swizzle, midgard_instruction *user) @@ -707,7 +713,7 @@ mir_schedule_comparison( /* TODO: swizzle when scheduling */ unsigned comp_i = (!vector && (swizzle == 0)) ? - mir_comparison_mobile(ctx, instructions, count, cond) : ~0; + mir_comparison_mobile(ctx, instructions, predicate, count, cond) : ~0; /* If we can, schedule the condition immediately */ if ((comp_i != ~0) && BITSET_TEST(worklist, comp_i)) { @@ -747,7 +753,7 @@ mir_schedule_condition(compiler_context *ctx, /* Grab the conditional instruction */ midgard_instruction *cond = mir_schedule_comparison( - ctx, instructions, worklist, count, last->src[condition_index], + ctx, instructions, predicate, worklist, count, last->src[condition_index], vector, last->cond_swizzle, last); /* We have exclusive reign over this (possibly move) conditional |