From af62d027d39d850bace23a87b8455bdb9ec65728 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Thu, 31 Jul 2025 17:16:45 +0200 Subject: [PATCH] r00/sfn: Fix copy propagation into buffer load address A buffer load can not use an indirect register as address. Fixes: 79ca456b483 ("r600/sfn: rewrite NIR backend") Signed-off-by: Gert Wollny Part-of: (cherry picked from commit 874005aeb72801d5494a605bcb3e433ed18bc828) --- .pick_status.json | 2 +- src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 0172496f9f0..8e6cc4c1865 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3614,7 +3614,7 @@ "description": "r00/sfn: Fix copy propagation into buffer load address", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "79ca456b4837b3bc21cf9ef3c03c505c4b4909f6", "notes": null diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp index 86fd6bba91e..1a8c90cf08c 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp @@ -124,6 +124,8 @@ FetchInstr::replace_source(PRegister old_src, PVirtualValue new_src) bool success = false; auto new_reg = new_src->as_register(); if (new_reg) { + if (!new_reg->has_flag(Register::ssa) && new_reg->addr()) + return false; if (old_src->equal_to(*m_src)) { m_src->del_use(this); m_src = new_reg;