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;
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
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) {
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);