Mesa (master): freedreno/ir3: add helpers to move instructions

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 16 21:14:02 UTC 2020


Module: Mesa
Branch: master
Commit: 92d6eb4dd539f48355ebfe5408f6a18c5a4c3efd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=92d6eb4dd539f48355ebfe5408f6a18c5a4c3efd

Author: Rob Clark <robdclark at chromium.org>
Date:   Fri May 15 12:03:56 2020 -0700

freedreno/ir3: add helpers to move instructions

A bit cleaner than open coding the list manipulation.  Plus I want to
use it in the next patch, rather than adding more open coded list
futzing.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5280>

---

 src/freedreno/ir3/ir3.h          | 22 ++++++++++++++++++++++
 src/freedreno/ir3/ir3_a6xx.c     |  3 +--
 src/freedreno/ir3/ir3_group.c    |  3 +--
 src/freedreno/ir3/ir3_legalize.c |  3 +--
 4 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h
index 218fc04ab5a..90086294de8 100644
--- a/src/freedreno/ir3/ir3.h
+++ b/src/freedreno/ir3/ir3.h
@@ -593,6 +593,28 @@ void ir3_clear_mark(struct ir3 *shader);
 unsigned ir3_count_instructions(struct ir3 *ir);
 unsigned ir3_count_instructions_ra(struct ir3 *ir);
 
+/**
+ * Move 'instr' to just before 'after'
+ */
+static inline void
+ir3_instr_move_before(struct ir3_instruction *instr,
+		struct ir3_instruction *after)
+{
+	list_delinit(&instr->node);
+	list_addtail(&instr->node, &after->node);
+}
+
+/**
+ * Move 'instr' to just after 'before':
+ */
+static inline void
+ir3_instr_move_after(struct ir3_instruction *instr,
+		struct ir3_instruction *before)
+{
+	list_delinit(&instr->node);
+	list_add(&instr->node, &before->node);
+}
+
 void ir3_find_ssa_uses(struct ir3 *ir, void *mem_ctx, bool falsedeps);
 
 void ir3_set_dst_type(struct ir3_instruction *instr, bool half);
diff --git a/src/freedreno/ir3/ir3_a6xx.c b/src/freedreno/ir3/ir3_a6xx.c
index 39549d44b1d..a8c6553a518 100644
--- a/src/freedreno/ir3/ir3_a6xx.c
+++ b/src/freedreno/ir3/ir3_a6xx.c
@@ -404,8 +404,7 @@ get_atomic_dest_mov(struct ir3_instruction *atomic)
 	/* it will have already been appended to the end of the block, which
 	 * isn't where we want it, so fix-up the location:
 	 */
-	list_delinit(&mov->node);
-	list_add(&mov->node, &atomic->node);
+	ir3_instr_move_after(mov, atomic);
 
 	return atomic->data = mov;
 }
diff --git a/src/freedreno/ir3/ir3_group.c b/src/freedreno/ir3/ir3_group.c
index 182afde222a..61ecd5320b3 100644
--- a/src/freedreno/ir3/ir3_group.c
+++ b/src/freedreno/ir3/ir3_group.c
@@ -44,8 +44,7 @@ insert_mov(struct ir3_instruction *collect, int idx)
 	 * it should be safe to leave at the end of the block it is in:
 	 */
 	if (src->block == collect->block) {
-		list_delinit(&mov->node);
-		list_addtail(&mov->node, &collect->node);
+		ir3_instr_move_before(mov, collect);
 	}
 }
 
diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c
index ce3d4fdebb8..3dc6a6c7371 100644
--- a/src/freedreno/ir3/ir3_legalize.c
+++ b/src/freedreno/ir3/ir3_legalize.c
@@ -303,8 +303,7 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block)
 			ir3_reg_create(baryf, regid(0, 0), 0);
 
 			/* insert the dummy bary.f after last_input: */
-			list_delinit(&baryf->node);
-			list_add(&baryf->node, &last_input->node);
+			ir3_instr_move_after(baryf, last_input);
 
 			last_input = baryf;
 



More information about the mesa-commit mailing list