On 08/07/2013 03:45 PM, Ian Romanick wrote:
On 08/05/2013 06:28 PM, Kenneth Graunke wrote:
[snip]
+ *    (+f0) IF
+ *    MOV dst src0
+ *    ELSE
+ *    MOV dst src1
+ *    ENDIF

Do we see many cases of

     foo = batman;
     if (condition)
         foo = robin;

I haven't seen many cases of that, no.

+ *
+ * which can be easily translated into:
+ *
+ *    (+f0) SEL dst src0 src1
+ *
+ * If src0 is an immediate value, we promote it to a temporary GRF.
+ */
+void
+fs_visitor::try_replace_with_sel()
+{
+   fs_inst *endif_inst = (fs_inst *) instructions.get_tail();
+   assert(endif_inst->opcode == BRW_OPCODE_ENDIF);
+
+   /* Pattern match in reverse: IF, MOV, ELSE, MOV, ENDIF. */

Just curious about the decision to match in reverse...

We do normal code generation for an ir_if, then, after emitting the closing ENDIF, check if it fits the pattern. Since the end of the list is just after the ENDIF, and I don't know how many instructions may have been generated, it makes sense to do it in reverse.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to