On Sunday, December 21, 2014 03:37:25 PM Matt Turner wrote:
> ---
> No shader-db changes, unfortunately.

Unsurprising :) This patch doesn't implement what you meant.

1. instructions_match() checks a->conditional_mod == b->conditional_mod.
   So you won't ever see mixed conditional mods in operands_match() or
   is_expression_commutative().  I suspect this is why you see no changes.

2. It looks like your patch allows CSE of (a >= b) with (b >= a),
   which are clearly different.  So any changes would be wrong.

What you want is to use brw_swap_cmod.  It's then trivial to handle /all/
comparitors, not just L/GE.  I think what you want is:

static bool
instructions match(fs_inst *a, fs_inst *b)
{
   bool match = a->opcode == b->opcode &&
                a->saturate == b->saturate &&
                a->predicate == b->predicate &&
                a->predicate_inverse == b->predicate_inverse &&
                a->dst.type == b->dst.type &&
                a->sources == b->sources;

   if (a->is_tex()) {
       match = match &&
               a->offset == b->offset &&
               a->mlen == b->mlen &&
               a->regs_written == b->regs_written &&
               a->base_mrf == b->base_mrf &&
               a->eot == b->eot &&
               a->header_present == b->header_present &&
               a->shadow_compare == b->shadow_compare);
   }

   if (!match)
      return false;

   /* Comparisons match if both the comparitor and operands are flipped. */
   if (a->opcode == BRW_OPCODE_SEL &&
       a->conditional_mod == brw_swap_cmod(b->conditional_mod)
       a->src[0].equals(b->src[1]) && a->src[1].equals(b->src[0])) {
      return true;
   }

   return a->conditional_mod == b->conditional_mod && operands_match(a, b);
}

I'm also not sure why you special case SEL - it seems like CMP would work fine
as well, and would probably help even more.  Maybe just drop the opcode check.

FWIW, I haven't tested the above code.

--Ken

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to