freedreno/ir3: add helpers to move instructions
authorRob Clark <robdclark@chromium.org>
Fri, 15 May 2020 19:03:56 +0000 (12:03 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 16 Jun 2020 20:56:15 +0000 (20:56 +0000)
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@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5280>

src/freedreno/ir3/ir3.h
src/freedreno/ir3/ir3_a6xx.c
src/freedreno/ir3/ir3_group.c
src/freedreno/ir3/ir3_legalize.c

index 218fc04ab5a0d3328e7df4dd04be739dc64efad3..90086294de8f013771943634f4ee3232e9ff35d7 100644 (file)
@@ -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);
index 39549d44b1d38f205edf22be37988c3ea1ffd94c..a8c6553a518081cb10465586188a2e6395b44631 100644 (file)
@@ -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;
 }
index 182afde222adf50e761cbeef0f5bff32519d65e6..61ecd5320b315f3f494fcae501ffd5c575ea1c29 100644 (file)
@@ -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);
        }
 }
 
index ce3d4fdebb86e471dfb62bece67a27ad6261e32b..3dc6a6c7371f009c40d67a9aabf42e0d0d07ebdb 100644 (file)
@@ -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;