r300: Remove broken optimization in rc_transform_KILL
authorPavel Ondračka <pavel.ondracka@gmail.com>
Mon, 3 Jan 2022 14:47:43 +0000 (15:47 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 3 Jan 2022 20:45:32 +0000 (20:45 +0000)
The logic was reversed so this was not only not working but it was
also removing random instructions around. The special IF-KILP-ENDIF
case this optimization was targeting is already transformed to
KILL_IF in the TGSI, so just remove this altogether.

This fixes piglit glsl-fs-discard-04
v2: Update the comment as well

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/343
Signed-off-by: Pavel Ondračka <pavel.ondracka@gmail.com>
Reviewed-by: Filip Gawin <filip.gawin@zoho.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14378>

src/gallium/drivers/r300/compiler/radeon_program_alu.c

index 8b813ea..a253d9b 100644 (file)
@@ -1127,12 +1127,6 @@ int radeonTransformDeriv(struct radeon_compiler* c,
  *
  * === OR ===
  *
- * IF Temp[0].x -\
- * KILL         - > KIL -abs(Temp[0].x)
- * ENDIF        -/
- *
- * === OR ===
- *
  * IF Temp[0].x -> IF Temp[0].x
  * ...          -> ...
  * ELSE         -> ELSE
@@ -1177,21 +1171,6 @@ void rc_transform_KILL(struct radeon_compiler * c, void *user)
                         * block, because -0.0 is considered negative. */
                        inst->U.I.SrcReg[0] =
                                negate(absolute(if_inst->U.I.SrcReg[0]));
-
-                       if (inst->Prev->U.I.Opcode != RC_OPCODE_IF
-                               && inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
-
-                               /* Optimize the special case:
-                                * IF Temp[0].x
-                                * KILP
-                                * ENDIF
-                                */
-
-                               /* Remove IF */
-                               rc_remove_instruction(inst->Prev);
-                               /* Remove ENDIF */
-                               rc_remove_instruction(inst->Next);
-                       }
                }
        }
 }