aco: fix emitting DEALLOC_VGPRS in the discard block
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 22 Nov 2022 15:49:13 +0000 (16:49 +0100)
committerMarge Bot <emma+marge@anholt.net>
Tue, 22 Nov 2022 19:52:04 +0000 (19:52 +0000)
It should be emitted right before s_endpgm.

Cc: 22.3 mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19931>

src/amd/compiler/aco_lower_to_hw_instr.cpp

index dfb45dd..0f4d1f4 100644 (file)
@@ -2130,11 +2130,11 @@ lower_to_hw_instr(Program* program)
                   block = &program->blocks[block_idx];
 
                   bld.reset(discard_block);
-                  if (should_dealloc_vgprs)
-                     bld.sopp(aco_opcode::s_sendmsg, -1, sendmsg_dealloc_vgprs);
                   bld.exp(aco_opcode::exp, Operand(v1), Operand(v1), Operand(v1), Operand(v1), 0,
                           program->gfx_level >= GFX11 ? V_008DFC_SQ_EXP_MRT : V_008DFC_SQ_EXP_NULL,
                           false, true, true);
+                  if (should_dealloc_vgprs)
+                     bld.sopp(aco_opcode::s_sendmsg, -1, sendmsg_dealloc_vgprs);
                   bld.sopp(aco_opcode::s_endpgm);
 
                   bld.reset(&ctx.instructions);