From 26b3e2f7cd71bdc58dfddb235ae13b0a3c558495 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Mon, 6 Dec 2021 16:43:45 -0800 Subject: [PATCH] r300: Also consider ALU condition modifiers for loop DCE. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since we typically use an ALU op to set the condition modifier for the IF-BRK-ENDIF, we were particularly likely to remove the increment of the loop counter! Cc: mesa-stable Reviewed-by: Marek Olšák Part-of: --- .../drivers/r300/compiler/radeon_dataflow_deadcode.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r300/compiler/radeon_dataflow_deadcode.c b/src/gallium/drivers/r300/compiler/radeon_dataflow_deadcode.c index 678e1475883..708e3e96d97 100644 --- a/src/gallium/drivers/r300/compiler/radeon_dataflow_deadcode.c +++ b/src/gallium/drivers/r300/compiler/radeon_dataflow_deadcode.c @@ -253,8 +253,13 @@ void rc_dataflow_deadcode(struct radeon_compiler * c, void *user) if(opcode->HasDstReg){ int src = 0; unsigned int srcmasks[3]; - rc_compute_sources_for_writemask(ptr, - ptr->U.I.DstReg.WriteMask, srcmasks); + unsigned int writemask = ptr->U.I.DstReg.WriteMask; + if (ptr->U.I.WriteALUResult == RC_ALURESULT_X) + writemask |= RC_MASK_X; + else if (ptr->U.I.WriteALUResult == RC_ALURESULT_W) + writemask |= RC_MASK_W; + + rc_compute_sources_for_writemask(ptr, writemask, srcmasks); for(src=0; src < opcode->NumSrcRegs; src++){ mark_used(&s, ptr->U.I.SrcReg[src].File,