ir3: Fix list corruption in legalize_block()
authorConnor Abbott <cwabbott0@gmail.com>
Tue, 10 Nov 2020 10:50:29 +0000 (11:50 +0100)
committerConnor Abbott <cwabbott0@gmail.com>
Thu, 15 Apr 2021 14:03:54 +0000 (16:03 +0200)
We forgot to remove the instruction under consideration from instr_list
before inserting it into the block's list, which caused instr_list to
become corrupted. This happened to work but caused further corruption in
some rare scenarios.

Fixes: adf1659 ("freedreno/ir3: use standard list implementation")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7573>

src/freedreno/ir3/ir3_legalize.c

index 262a9c3..fa193b5 100644 (file)
@@ -243,6 +243,7 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block)
                                        samgp->flags |= IR3_INSTR_SY;
                        }
                } else {
+                       list_delinit(&n->node);
                        list_addtail(&n->node, &block->instr_list);
                }