diff options
author | Jason Ekstrand <[email protected]> | 2017-01-17 18:38:38 -0800 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-04-20 03:46:29 +0000 |
commit | 5b1615fdb75659cb02fcbcd684046eabdb807930 (patch) | |
tree | 70f389d172871ede6feb4d1d5fde0adf63f3b5a2 /src/compiler | |
parent | 1f60f1aa3d0853b8374ec384c128eb4731fe4c85 (diff) |
nir/gcm: Move block choosing into a helper function
Reviewed-by: Kenneth Graunke <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4636>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir_opt_gcm.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/compiler/nir/nir_opt_gcm.c b/src/compiler/nir/nir_opt_gcm.c index 4d62e813f4b..375f9e71b57 100644 --- a/src/compiler/nir/nir_opt_gcm.c +++ b/src/compiler/nir/nir_opt_gcm.c @@ -266,6 +266,25 @@ gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state) nir_foreach_src(instr, gcm_schedule_early_src, state); } +static nir_block * +gcm_choose_block_for_instr(nir_instr *instr, nir_block *early_block, + nir_block *late_block, struct gcm_state *state) +{ + assert(nir_block_dominates(early_block, late_block)); + + nir_block *best = late_block; + for (nir_block *block = late_block; block != NULL; block = block->imm_dom) { + if (state->blocks[block->index].loop_depth < + state->blocks[best->index].loop_depth) + best = block; + + if (block == early_block) + break; + } + + return best; +} + static void gcm_schedule_late_instr(nir_instr *instr, struct gcm_state *state); @@ -335,17 +354,8 @@ gcm_schedule_late_def(nir_ssa_def *def, void *void_state) * We now walk up the dominance tree and pick the lowest block that is * as far outside loops as we can get. */ - assert(nir_block_dominates(early_block, lca)); - nir_block *best = lca; - for (nir_block *block = lca; block != NULL; block = block->imm_dom) { - if (state->blocks[block->index].loop_depth < - state->blocks[best->index].loop_depth) - best = block; - - if (block == early_block) - break; - } - def->parent_instr->block = best; + def->parent_instr->block = + gcm_choose_block_for_instr(def->parent_instr, early_block, lca, state); return true; } |