<div dir="ltr">I have reverted this for now in r289194. It is causing <a href="http://llvm.org/PR31323">llvm.org/PR31323</a>.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 7, 2016 at 5:28 PM, Simon Pilgrim via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rksimon<br>
Date: Wed Dec  7 10:28:21 2016<br>
New Revision: 288916<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=288916&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=288916&view=rev</a><br>
Log:<br>
[SelectionDAG] Add knownbits support for EXTRACT_VECTOR_ELT opcodes<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/SelectionDAG.cpp<br>
    llvm/trunk/test/CodeGen/X86/<wbr>known-bits-vector.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/SelectionDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=288916&r1=288915&r2=288916&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/SelectionDAG/<wbr>SelectionDAG.cpp?rev=288916&<wbr>r1=288915&r2=288916&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/SelectionDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/SelectionDAG.cpp Wed Dec  7 10:28:21 2016<br>
@@ -2590,6 +2590,42 @@ void SelectionDAG::<wbr>computeKnownBits(SDVa<br>
     }<br>
     break;<br>
   }<br>
+  case ISD::INSERT_VECTOR_ELT: {<br>
+    SDValue InVec = Op.getOperand(0);<br>
+    SDValue InVal = Op.getOperand(1);<br>
+    SDValue EltNo = Op.getOperand(2);<br>
+<br>
+    ConstantSDNode *CEltNo = dyn_cast<ConstantSDNode>(<wbr>EltNo);<br>
+    if (CEltNo && CEltNo->getAPIntValue().ult(<wbr>NumElts)) {<br>
+      // If we know the element index, split the demand between the<br>
+      // source vector and the inserted element.<br>
+      KnownZero = KnownOne = APInt::getAllOnesValue(<wbr>BitWidth);<br>
+      unsigned EltIdx = CEltNo->getZExtValue();<br>
+<br>
+      // If we demand the inserted element then add its common known bits.<br>
+      if (DemandedElts[EltIdx]) {<br>
+        computeKnownBits(InVal, KnownZero2, KnownOne2, Depth + 1);<br>
+        KnownOne &= KnownOne2.zextOrTrunc(<wbr>KnownOne.getBitWidth());<br>
+        KnownZero &= KnownZero2.zextOrTrunc(<wbr>KnownZero.getBitWidth());;<br>
+      }<br>
+<br>
+      // If we demand the source vector then add its common known bits, ensuring<br>
+      // that we don't demand the inserted element.<br>
+      APInt VectorElts = DemandedElts & ~(APInt::getOneBitSet(NumElts, EltIdx));<br>
+      if (!!VectorElts) {<br>
+        computeKnownBits(InVec, KnownZero2, KnownOne2, VectorElts, Depth + 1);<br>
+        KnownOne &= KnownOne2;<br>
+        KnownZero &= KnownZero2;<br>
+      }<br>
+    } else {<br>
+      // Unknown element index, so ignore DemandedElts and demand them all.<br>
+      computeKnownBits(InVec, KnownZero, KnownOne, Depth + 1);<br>
+      computeKnownBits(InVal, KnownZero2, KnownOne2, Depth + 1);<br>
+      KnownOne &= KnownOne2.zextOrTrunc(<wbr>KnownOne.getBitWidth());<br>
+      KnownZero &= KnownZero2.zextOrTrunc(<wbr>KnownZero.getBitWidth());;<br>
+    }<br>
+    break;<br>
+  }<br>
   case ISD::BSWAP: {<br>
     computeKnownBits(Op.<wbr>getOperand(0), KnownZero2, KnownOne2, DemandedElts,<br>
                      Depth + 1);<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/<wbr>known-bits-vector.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/known-bits-vector.ll?rev=288916&r1=288915&r2=288916&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/X86/known-bits-vector.<wbr>ll?rev=288916&r1=288915&r2=<wbr>288916&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/<wbr>known-bits-vector.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/<wbr>known-bits-vector.ll Wed Dec  7 10:28:21 2016<br>
@@ -58,11 +58,7 @@ define <4 x float> @knownbits_insert_uit<br>
 ; X32-NEXT:    vpinsrd $0, %eax, %xmm0, %xmm0<br>
 ; X32-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0<br>
 ; X32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]<br>
-; X32-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],<wbr>xmm0[4],mem[5],xmm0[6],mem[7]<br>
-; X32-NEXT:    vpsrld $16, %xmm0, %xmm0<br>
-; X32-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],<wbr>xmm0[4],mem[5],xmm0[6],mem[7]<br>
-; X32-NEXT:    vaddps {{\.LCPI.*}}, %xmm0, %xmm0<br>
-; X32-NEXT:    vaddps %xmm0, %xmm1, %xmm0<br>
+; X32-NEXT:    vcvtdq2ps %xmm0, %xmm0<br>
 ; X32-NEXT:    retl<br>
 ;<br>
 ; X64-LABEL: knownbits_insert_uitofp:<br>
@@ -72,11 +68,7 @@ define <4 x float> @knownbits_insert_uit<br>
 ; X64-NEXT:    vpinsrd $0, %eax, %xmm0, %xmm0<br>
 ; X64-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0<br>
 ; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]<br>
-; X64-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],<wbr>xmm0[4],mem[5],xmm0[6],mem[7]<br>
-; X64-NEXT:    vpsrld $16, %xmm0, %xmm0<br>
-; X64-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],<wbr>xmm0[4],mem[5],xmm0[6],mem[7]<br>
-; X64-NEXT:    vaddps {{.*}}(%rip), %xmm0, %xmm0<br>
-; X64-NEXT:    vaddps %xmm0, %xmm1, %xmm0<br>
+; X64-NEXT:    vcvtdq2ps %xmm0, %xmm0<br>
 ; X64-NEXT:    retq<br>
   %1 = zext i16 %a1 to i32<br>
   %2 = zext i16 %a2 to i32<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">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><br>
</blockquote></div><br></div>