freedreno/ir3: Handle instr->address when cloning
authorRob Clark <robdclark@chromium.org>
Thu, 2 Dec 2021 01:06:20 +0000 (17:06 -0800)
committerMarge Bot <emma+marge@anholt.net>
Mon, 20 Dec 2021 19:47:35 +0000 (19:47 +0000)
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 <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14231>

src/freedreno/ir3/ir3.c

index 766a7ad..162a393 100644 (file)
@@ -493,6 +493,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;
 }