panfrost: Build midgard_pack.h via meson
[mesa.git] / src / panfrost / midgard / midgard_opt_copy_prop.c
index ca4f78f9a330806c305e082e8395b469a807812e..331c3d1dfa272129392f8194cab457438df35406 100644 (file)
@@ -34,17 +34,18 @@ midgard_opt_copy_prop_reg(compiler_context *ctx, midgard_block *block)
 
         mir_foreach_instr_in_block_safe(block, ins) {
                 if (ins->type != TAG_ALU_4) continue;
-                if (!OP_IS_MOVE(ins->alu.op)) continue;
+                if (!OP_IS_MOVE(ins->op)) continue;
+                if (ins->is_pack) continue;
 
                 unsigned from = ins->src[1];
                 unsigned to = ins->dest;
 
-                if (!(to & IS_REG))  continue;
-                if (from & IS_REG) continue;
+                if (!(to & PAN_IS_REG))  continue;
+                if (from & PAN_IS_REG) continue;
 
                 if (ins->has_inline_constant) continue;
                 if (ins->has_constants) continue;
-                if (mir_nontrivial_source2_mod(ins)) continue;
+                if (mir_nontrivial_mod(ins, 1, true)) continue;
                 if (mir_nontrivial_outmod(ins)) continue;
                 if (!mir_single_use(ctx, from)) continue;
 
@@ -67,24 +68,23 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
 
         mir_foreach_instr_in_block_safe(block, ins) {
                 if (ins->type != TAG_ALU_4) continue;
-                if (!OP_IS_MOVE(ins->alu.op)) continue;
+                if (!OP_IS_MOVE(ins->op)) continue;
+                if (ins->is_pack) continue;
 
                 unsigned from = ins->src[1];
                 unsigned to = ins->dest;
 
                 /* We only work on pure SSA */
 
-                if (to >= SSA_FIXED_MINIMUM) continue;
-                if (from >= SSA_FIXED_MINIMUM) continue;
-                if (to & IS_REG) continue;
-                if (from & IS_REG) continue;
+                if (to & PAN_IS_REG) continue;
+                if (from & PAN_IS_REG) continue;
 
                 /* Constant propagation is not handled here, either */
                 if (ins->has_inline_constant) continue;
                 if (ins->has_constants) continue;
 
                 /* Modifier propagation is not handled here */
-                if (mir_nontrivial_source2_mod_simple(ins)) continue;
+                if (mir_nontrivial_mod(ins, 1, false)) continue;
                 if (mir_nontrivial_outmod(ins)) continue;
 
                 /* Shortened arguments (bias for textures, extra load/store
@@ -107,7 +107,7 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
 
                         unsigned start =
                                 is_tex ? 2 :
-                                OP_IS_STORE(q->load_store.op) ? 1 : 0;
+                                OP_IS_STORE(q->op) ? 1 : 0;
 
                         mir_foreach_src(q, s) {
                                 if ((s >= start) && q->src[s] == to) {
@@ -120,6 +120,9 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
                 if (skip)
                         continue;
 
+                if (ctx->blend_src1 == to)
+                        ctx->blend_src1 = from;
+
                 /* We're clear -- rewrite, composing the swizzle */
                 mir_rewrite_index_src_swizzle(ctx, to, from, ins->swizzle[1]);
                 mir_remove_instruction(ins);