Mesa (main): pan/mdg: Reorder some code in mir_spill_register
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jun 17 20:04:49 UTC 2021
Module: Mesa
Branch: main
Commit: ed9a9a09f2899baadbcf700352a70df677f658ef
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed9a9a09f2899baadbcf700352a70df677f658ef
Author: Icecream95 <ixn at disroot.org>
Date: Mon Jun 7 19:25:42 2021 +1200
pan/mdg: Reorder some code in mir_spill_register
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11212>
---
src/panfrost/midgard/midgard_ra.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/panfrost/midgard/midgard_ra.c b/src/panfrost/midgard/midgard_ra.c
index 01e040b10d9..ae4f87342e2 100644
--- a/src/panfrost/midgard/midgard_ra.c
+++ b/src/panfrost/midgard/midgard_ra.c
@@ -862,6 +862,13 @@ mir_spill_register(
/* Allocate TLS slot (maybe) */
unsigned spill_slot = !is_special ? (*spill_count)++ : 0;
+ /* For special reads, figure out how many bytes we need */
+ unsigned read_bytemask = 0;
+
+ mir_foreach_instr_global_safe(ctx, ins) {
+ read_bytemask |= mir_bytemask_of_read_components(ins, spill_node);
+ }
+
/* For TLS, replace all stores to the spilled node. For
* special reads, just keep as-is; the class will be demoted
* implicitly. For special writes, spill to a work register */
@@ -875,8 +882,6 @@ mir_spill_register(
mir_foreach_instr_in_block_safe(block, ins) {
if (ins->dest != spill_node) continue;
- midgard_instruction st;
-
/* Note: it's important to match the mask of the spill
* with the mask of the instruction whose destination
* we're spilling, or otherwise we'll read invalid
@@ -884,20 +889,23 @@ mir_spill_register(
*/
if (is_special_w) {
- st = v_mov(spill_node, spill_slot);
+ midgard_instruction st = v_mov(spill_node, spill_slot);
st.no_spill |= (1 << spill_class);
st.mask = ins->mask;
st.dest_type = st.src_types[1] = ins->dest_type;
+
+ /* Hint: don't rewrite this node */
+ st.hint = true;
+
+ mir_insert_instruction_after_scheduled(ctx, block, ins, st);
} else {
ins->dest = spill_index++;
ins->no_spill |= (1 << spill_class);
- st = v_load_store_scratch(ins->dest, spill_slot, true, ins->mask);
- }
-
- /* Hint: don't rewrite this node */
- st.hint = true;
- mir_insert_instruction_after_scheduled(ctx, block, ins, st);
+ midgard_instruction st =
+ v_load_store_scratch(ins->dest, spill_slot, true, ins->mask);
+ mir_insert_instruction_after_scheduled(ctx, block, ins, st);
+ }
if (!is_special)
ctx->spills++;
@@ -905,13 +913,6 @@ mir_spill_register(
}
}
- /* For special reads, figure out how many bytes we need */
- unsigned read_bytemask = 0;
-
- mir_foreach_instr_global_safe(ctx, ins) {
- read_bytemask |= mir_bytemask_of_read_components(ins, spill_node);
- }
-
/* Insert a load from TLS before the first consecutive
* use of the node, rewriting to use spilled indices to
* break up the live range. Or, for special, insert a
More information about the mesa-commit
mailing list