Module: Mesa Branch: staging/21.3 Commit: cc68a60bec05b26271d48ebda49870785c756b38 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc68a60bec05b26271d48ebda49870785c756b38
Author: Rob Clark <[email protected]> Date: Wed Dec 1 17:06:20 2021 -0800 freedreno/ir3: Handle instr->address when cloning Without this, a cloned instruction that takes full regs will trigger an ir3_validate assert. This can happen, for ex, if an instruction that writes p0.x and has a relative src gets cloned in ir3_sched. Fixes an assert in Genshin Impact with a debug build. Fixes: 9af795d9b98 ("ir3: Make ir3_instruction::address a normal register") Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14231> (cherry picked from commit 78c53f48888bf936d41e16b8bcf020beb5c5ff99) --- .pick_status.json | 2 +- src/freedreno/ir3/ir3.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 88b9961a87a..c7aea0f28e6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -580,7 +580,7 @@ "description": "freedreno/ir3: Handle instr->address when cloning", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9af795d9b984055042ef4ed33c6d3f2021be778a" }, diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c index e5750827304..83236811390 100644 --- a/src/freedreno/ir3/ir3.c +++ b/src/freedreno/ir3/ir3.c @@ -490,6 +490,11 @@ ir3_instr_clone(struct ir3_instruction *instr) *new_reg = *reg; } + if (instr->address) { + assert(instr->srcs_count > 0); + new_instr->address = new_instr->srcs[instr->srcs_count - 1]; + } + return new_instr; }
