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>
*
* === OR ===
*
- * IF Temp[0].x -\
- * KILL - > KIL -abs(Temp[0].x)
- * ENDIF -/
- *
- * === OR ===
- *
* IF Temp[0].x -> IF Temp[0].x
* ... -> ...
* ELSE -> ELSE
* 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);
- }
}
}
}