<div dir="ltr">On 27 September 2013 18:17, 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">
v2: Set destination register using brw_null_reg().<br></blockquote><div><br></div><div>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>
 src/mesa/drivers/dri/i965/brw_fs.cpp   | 15 ++++++++++++++-<br>
 src/mesa/drivers/dri/i965/brw_vec4.cpp | 15 ++++++++++++++-<br>
 2 files changed, 28 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
index c1ab561..6c8294c 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
@@ -1845,7 +1845,20 @@ fs_visitor::dead_code_eliminate()<br>
<div class="im">       if (inst->dst.file == GRF) {<br>
          assert(this->virtual_grf_end[inst->dst.reg] >= pc);<br>
          if (this->virtual_grf_end[inst->dst.reg] == pc) {<br>
-            inst->remove();<br>
+            /* Don't dead code eliminate instructions that write to the<br>
+             * accumulator as a side-effect. Instead just set the destination<br>
+             * to the null register to free it.<br>
+             */<br>
+            switch (inst->opcode) {<br>
+            case BRW_OPCODE_ADDC:<br>
+            case BRW_OPCODE_SUBB:<br>
+            case BRW_OPCODE_MACH:<br>
</div>+               inst->dst = fs_reg(retype(brw_null_reg(), inst->dst.type));<br>
<div class="im">+               break;<br>
+            default:<br>
+               inst->remove();<br>
+               break;<br>
+            }<br>
             progress = true;<br>
          }<br>
       }<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
</div>index 2c1f541..812a005 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
@@ -313,7 +313,20 @@ vec4_visitor::dead_code_eliminate()<br>
<div class="im">       if (inst->dst.file == GRF) {<br>
          assert(this->virtual_grf_end[inst->dst.reg] >= pc);<br>
          if (this->virtual_grf_end[inst->dst.reg] == pc) {<br>
-            inst->remove();<br>
+            /* Don't dead code eliminate instructions that write to the<br>
+             * accumulator as a side-effect. Instead just set the destination<br>
+             * to the null register to free it.<br>
+             */<br>
+            switch (inst->opcode) {<br>
+            case BRW_OPCODE_ADDC:<br>
+            case BRW_OPCODE_SUBB:<br>
+            case BRW_OPCODE_MACH:<br>
</div>+               inst->dst = dst_reg(retype(brw_null_reg(), inst->dst.type));<br>
<div class="im HOEnZb">+               break;<br>
+            default:<br>
+               inst->remove();<br>
+               break;<br>
+            }<br>
             progress = true;<br>
          }<br>
       }<br>
--<br>
1.8.3.2<br>
<br>
</div><div class="HOEnZb"><div class="h5">_______________________________________________<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>
</div></div></blockquote></div><br></div></div>