Module: Mesa
Branch: staging/21.3
Commit: cdf03573da0bd9fa66b7853ef9564c4eec5ff4bc
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cdf03573da0bd9fa66b7853ef9564c4eec5ff4bc

Author: Pavel Ondračka <[email protected]>
Date:   Mon Jan  3 15:47:43 2022 +0100

r300: Remove broken optimization in rc_transform_KILL

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 <[email protected]>
Reviewed-by: Filip Gawin <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Reviewed-by: Emma Anholt <[email protected]>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14378>
(cherry picked from commit 96ad4f64375905c710f881e6972784f597799457)

---

 .pick_status.json                                   |  2 +-
 .../drivers/r300/compiler/radeon_program_alu.c      | 21 ---------------------
 2 files changed, 1 insertion(+), 22 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 5244e81c631..3a75a2dee39 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -643,7 +643,7 @@
         "description": "r300: Remove broken optimization in rc_transform_KILL",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/r300/compiler/radeon_program_alu.c 
b/src/gallium/drivers/r300/compiler/radeon_program_alu.c
index 9d96307f117..a2416c5503d 100644
--- a/src/gallium/drivers/r300/compiler/radeon_program_alu.c
+++ b/src/gallium/drivers/r300/compiler/radeon_program_alu.c
@@ -1215,12 +1215,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
@@ -1265,21 +1259,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);
-                       }
                }
        }
 }

Reply via email to