<div dir="ltr">I'll work on one. My real objective was to remove this code outright because it should have been dead because its equivalent to transformations done by SimplifyDemandedInstructionBit<wbr>s. I did remove it in r299337, but that broke the tsan buildbot so I had to revert it while I figured out what was going on. What I discovered was that this code was duplicating instructions and thus firing when SimplifyDemandedInstructionBit<wbr>s wasn't. So I fixed the duplication and the tsan bot failure. I figured removing the duplication first was an easier way to explain the tsan change. Now I plan to go back to removing it completely.</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote">On Thu, Apr 6, 2017 at 10:53 AM, Friedman, Eli <span dir="ltr"><<a href="mailto:efriedma@codeaurora.org" target="_blank">efriedma@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 4/6/2017 9:42 AM, Craig Topper via llvm-commits wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: ctopper<br>
Date: Thu Apr  6 11:42:46 2017<br>
New Revision: 299658<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=299658&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=299658&view=rev</a><br>
Log:<br>
[InstCombine] Fix a case where we weren't checking that an instruction had a single use resulting in extra instructions being created.<br>
</blockquote>
<br>
Testcase?<br>
<br>
-Eli<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
     llvm/trunk/lib/Transforms/Ins<wbr>tCombine/InstCombineAndOrXor.<wbr>cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Inst<wbr>Combine/InstCombineAndOrXor.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp?rev=299658&r1=299657&r2=299658&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/Transform<wbr>s/InstCombine/InstCombineAndOr<wbr>Xor.cpp?rev=299658&r1=299657&<wbr>r2=299658&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/Inst<wbr>Combine/InstCombineAndOrXor.<wbr>cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Inst<wbr>Combine/InstCombineAndOrXor.<wbr>cpp Thu Apr  6 11:42:46 2017<br>
@@ -1332,18 +1332,21 @@ Instruction *InstCombiner::visitAnd(Bina<br>
          // ((A & N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == AndRHS.<br>
          // ((A | N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0<br>
          // ((A ^ N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0<br>
-        if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, false, I))<br>
-          return BinaryOperator::CreateAnd(V, AndRHS);<br>
-        if (Value *V = FoldLogicalPlusAnd(Op0RHS, Op0LHS, AndRHS, false, I))<br>
-          return BinaryOperator::CreateAnd(V, AndRHS);  // Add commutes<br>
+        if (Op0I->hasOneUse()) {<br>
+          if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, false, I))<br>
+            return BinaryOperator::CreateAnd(V, AndRHS);<br>
+          if (Value *V = FoldLogicalPlusAnd(Op0RHS, Op0LHS, AndRHS, false, I))<br>
+            return BinaryOperator::CreateAnd(V, AndRHS);  // Add commutes<br>
+        }<br>
          break;<br>
          case Instruction::Sub:<br>
          // ((A & N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == AndRHS.<br>
          // ((A | N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0<br>
          // ((A ^ N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0<br>
-        if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, true, I))<br>
-          return BinaryOperator::CreateAnd(V, AndRHS);<br>
+        if (Op0I->hasOneUse())<br>
+          if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, true, I))<br>
+            return BinaryOperator::CreateAnd(V, AndRHS);<br>
            // -x & 1 -> x & 1<br>
          if (AndRHSMask == 1 && match(Op0LHS, m_Zero()))<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><span class="HOEnZb"><font color="#888888"><br>
</font></span></blockquote><span class="HOEnZb"><font color="#888888">
<br>
<br>
-- <br>
Employee of Qualcomm Innovation Center, Inc.<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
<br>
</font></span></blockquote></div><br></div>