Mesa (master): pan/midgard: Allow inverted inverted ops

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 27 21:31:27 UTC 2020


Module: Mesa
Branch: master
Commit: 21c578027fb25421af750b98bc59ecd59bcfeff4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=21c578027fb25421af750b98bc59ecd59bcfeff4

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Wed Feb 26 13:50:46 2020 -0500

pan/midgard: Allow inverted inverted ops

We'd like to transform `inand.not` back to `iand` and so forth.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3978>

---

 src/panfrost/midgard/midgard_opt_invert.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/panfrost/midgard/midgard_opt_invert.c b/src/panfrost/midgard/midgard_opt_invert.c
index e11e4c0fdec..b0ca4bd257f 100644
--- a/src/panfrost/midgard/midgard_opt_invert.c
+++ b/src/panfrost/midgard/midgard_opt_invert.c
@@ -113,16 +113,35 @@ mir_is_bitwise(midgard_instruction *ins)
         }
 }
 
+static bool
+mir_is_inverted_bitwise(midgard_instruction *ins)
+{
+        switch (ins->alu.op) {
+        case midgard_alu_op_inand:
+        case midgard_alu_op_inor:
+        case midgard_alu_op_inxor:
+                return true;
+        default:
+                return false;
+        }
+}
+
 static midgard_alu_op
 mir_invert_op(midgard_alu_op op)
 {
         switch (op) {
         case midgard_alu_op_iand:
                 return midgard_alu_op_inand;
+        case midgard_alu_op_inand:
+                return midgard_alu_op_iand;
         case midgard_alu_op_ior:
                 return midgard_alu_op_inor;
+        case midgard_alu_op_inor:
+                return midgard_alu_op_ior;
         case midgard_alu_op_ixor:
                 return midgard_alu_op_inxor;
+        case midgard_alu_op_inxor:
+                return midgard_alu_op_ixor;
         default:
                 unreachable("Op not invertible");
         }
@@ -162,7 +181,7 @@ midgard_opt_fuse_dest_invert(compiler_context *ctx, midgard_block *block)
         mir_foreach_instr_in_block_safe(block, ins) {
                 /* Search for inverted bitwise */
                 if (ins->type != TAG_ALU_4) continue;
-                if (!mir_is_bitwise(ins)) continue;
+                if (!mir_is_bitwise(ins) && !mir_is_inverted_bitwise(ins)) continue;
                 if (!ins->invert) continue;
 
                 ins->alu.op = mir_invert_op(ins->alu.op);



More information about the mesa-commit mailing list