<div dir="ltr">On 28 October 2013 11:31, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
total instructions in shared programs: 1287488 -> 1287457 (-0.00%)<br>
instructions in affected programs:     1745 -> 1714 (-1.78%)<br>
---<br>
 src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp | 38 +++++++++++++----------<br>
 1 file changed, 21 insertions(+), 17 deletions(-)<br></blockquote><div><br></div><div>Patch subject should be "i965/fs: Emit a MOV instead of a SEL if the sources are the same." (you had an extraneous "if").<br>
</div><div><br></div><div>With that change, patch is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp<br>
index 8638f43..4c0eba9 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp<br>
@@ -224,26 +224,30 @@ fs_visitor::opt_peephole_sel()<br>
             break;<br>
          }<br>
<br>
-         /* Only the last source register can be a constant, so if the MOV in<br>
-          * the "then" clause uses a constant, we need to put it in a<br>
-          * temporary.<br>
-          */<br>
-         fs_reg src0(then_mov[i]->src[0]);<br>
-         if (src0.file == IMM) {<br>
-            src0 = fs_reg(this, glsl_type::float_type);<br>
-            src0.type = then_mov[i]->src[0].type;<br>
-            mov_imm_inst[i] = MOV(src0, then_mov[i]->src[0]);<br>
-         }<br>
+         if (!then_mov[i]->src[0].equals(else_mov[i]->src[0])) {<br>
+            /* Only the last source register can be a constant, so if the MOV<br>
+             * in the "then" clause uses a constant, we need to put it in a<br>
+             * temporary.<br>
+             */<br>
+            fs_reg src0(then_mov[i]->src[0]);<br>
+            if (src0.file == IMM) {<br>
+               src0 = fs_reg(this, glsl_type::float_type);<br>
+               src0.type = then_mov[i]->src[0].type;<br>
+               mov_imm_inst[i] = MOV(src0, then_mov[i]->src[0]);<br>
+            }<br>
<br>
-         sel_inst[i] = SEL(then_mov[i]->dst, src0, else_mov[i]->src[0]);<br>
+            sel_inst[i] = SEL(then_mov[i]->dst, src0, else_mov[i]->src[0]);<br>
<br>
-         if (brw->gen == 6 && if_inst->conditional_mod) {<br>
-            /* For Sandybridge with IF with embedded comparison */<br>
-            sel_inst[i]->predicate = BRW_PREDICATE_NORMAL;<br>
+            if (brw->gen == 6 && if_inst->conditional_mod) {<br>
+               /* For Sandybridge with IF with embedded comparison */<br>
+               sel_inst[i]->predicate = BRW_PREDICATE_NORMAL;<br>
+            } else {<br>
+               /* Separate CMP and IF instructions */<br>
+               sel_inst[i]->predicate = if_inst->predicate;<br>
+               sel_inst[i]->predicate_inverse = if_inst->predicate_inverse;<br>
+            }<br>
          } else {<br>
-            /* Separate CMP and IF instructions */<br>
-            sel_inst[i]->predicate = if_inst->predicate;<br>
-            sel_inst[i]->predicate_inverse = if_inst->predicate_inverse;<br>
+            sel_inst[i] = MOV(then_mov[i]->dst, then_mov[i]->src[0]);<br>
          }<br>
<br>
          bb_progress = true;<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.3.2<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>