[Mesa-dev] [PATCH 28/30] pan/midgard: Add mir_flip helper
Alyssa Rosenzweig
alyssa.rosenzweig at collabora.com
Sat Sep 28 19:02:33 UTC 2019
Useful for various operations on both commutative and anticommutative
ops.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
---
src/panfrost/midgard/compiler.h | 1 +
src/panfrost/midgard/midgard_opt_invert.c | 13 +++----------
src/panfrost/midgard/mir.c | 17 +++++++++++++++++
3 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h
index cb7d53dd653..8bbf67aa4e7 100644
--- a/src/panfrost/midgard/compiler.h
+++ b/src/panfrost/midgard/compiler.h
@@ -524,6 +524,7 @@ bool mir_nontrivial_outmod(midgard_instruction *ins);
void mir_insert_instruction_before_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins);
void mir_insert_instruction_after_scheduled(compiler_context *ctx, midgard_block *block, midgard_instruction *tag, midgard_instruction ins);
+void mir_flip(midgard_instruction *ins);
/* MIR goodies */
diff --git a/src/panfrost/midgard/midgard_opt_invert.c b/src/panfrost/midgard/midgard_opt_invert.c
index 729169f9a4a..f846bca5bf9 100644
--- a/src/panfrost/midgard/midgard_opt_invert.c
+++ b/src/panfrost/midgard/midgard_opt_invert.c
@@ -256,16 +256,9 @@ midgard_opt_fuse_src_invert(compiler_context *ctx, midgard_block *block)
if (both) {
ins->alu.op = mir_demorgan_op(ins->alu.op);
} else if (right || (left && !ins->has_inline_constant)) {
- if (left) {
- /* Commute */
- unsigned temp = ins->src[0];
- ins->src[0] = ins->src[1];
- ins->src[1] = temp;
-
- temp = ins->alu.src1;
- ins->alu.src1 = ins->alu.src2;
- ins->alu.src2 = temp;
- }
+ /* Commute arguments */
+ if (left)
+ mir_flip(ins);
ins->alu.op = mir_notright_op(ins->alu.op);
} else if (left && ins->has_inline_constant) {
diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c
index faeac16d18d..f02527ff219 100644
--- a/src/panfrost/midgard/mir.c
+++ b/src/panfrost/midgard/mir.c
@@ -527,3 +527,20 @@ mir_insert_instruction_after_scheduled(
memcpy(bundles + after + 1, &new, sizeof(new));
list_addtail(&new.instructions[0]->link, &after_bundle_1->instructions[0]->link);
}
+
+/* Flip the first-two arguments of a (binary) op. Currently ALU
+ * only, no known uses for ldst/tex */
+
+void
+mir_flip(midgard_instruction *ins)
+{
+ unsigned temp = ins->src[0];
+ ins->src[0] = ins->src[1];
+ ins->src[1] = temp;
+
+ assert(ins->type == TAG_ALU_4);
+
+ temp = ins->alu.src1;
+ ins->alu.src1 = ins->alu.src2;
+ ins->alu.src2 = temp;
+}
--
2.23.0
More information about the mesa-dev
mailing list