summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-01-17 18:38:38 -0800
committerMarge Bot <[email protected]>2020-04-20 03:46:29 +0000
commit5b1615fdb75659cb02fcbcd684046eabdb807930 (patch)
tree70f389d172871ede6feb4d1d5fde0adf63f3b5a2 /src/compiler
parent1f60f1aa3d0853b8374ec384c128eb4731fe4c85 (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.c32
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;
}