<div dir="ltr">Test case added in r289374.</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 Sun, Dec 11, 2016 at 12:01 AM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">No test case?</div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 10, 2016 at 11:52 PM Craig Topper via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ctopper<br class="m_7780462313757425357gmail_msg">
Date: Sun Dec 11 01:42:01 2016<br class="m_7780462313757425357gmail_msg">
New Revision: 289370<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=289370&view=rev" rel="noreferrer" class="m_7780462313757425357gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=289370&view=rev</a><br class="m_7780462313757425357gmail_msg">
Log:<br class="m_7780462313757425357gmail_msg">
[AVX-512][InstCombine] Teach InstCombineCalls how to simplify demanded elements for scalar add,div,mul,sub,max,min intrinsics with masking and rounding.<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
These intrinsics don't read the upper bits of their second input. And the third input is the passthru for masking and that only uses the lower element as well.<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
Modified:<br class="m_7780462313757425357gmail_msg">
    llvm/trunk/lib/Transforms/<wbr>InstCombine/InstCombineCalls.<wbr>cpp<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
Modified: llvm/trunk/lib/Transforms/<wbr>InstCombine/InstCombineCalls.<wbr>cpp<br class="m_7780462313757425357gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=289370&r1=289369&r2=289370&view=diff" rel="noreferrer" class="m_7780462313757425357gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/InstCombine/<wbr>InstCombineCalls.cpp?rev=<wbr>289370&r1=289369&r2=289370&<wbr>view=diff</a><br class="m_7780462313757425357gmail_msg">
==============================<wbr>==============================<wbr>==================<br class="m_7780462313757425357gmail_msg">
--- llvm/trunk/lib/Transforms/<wbr>InstCombine/InstCombineCalls.<wbr>cpp (original)<br class="m_7780462313757425357gmail_msg">
+++ llvm/trunk/lib/Transforms/<wbr>InstCombine/InstCombineCalls.<wbr>cpp Sun Dec 11 01:42:01 2016<br class="m_7780462313757425357gmail_msg">
@@ -1775,6 +1775,37 @@ Instruction *InstCombiner::visitCallInst<br class="m_7780462313757425357gmail_msg">
     break;<br class="m_7780462313757425357gmail_msg">
   }<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>add_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>div_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>mul_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>sub_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>max_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>min_ss_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>add_sd_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>div_sd_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>mul_sd_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>sub_sd_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>max_sd_round:<br class="m_7780462313757425357gmail_msg">
+  case Intrinsic::x86_avx512_mask_<wbr>min_sd_round: {<br class="m_7780462313757425357gmail_msg">
+    // These intrinsics only demand the lowest element of the second and third<br class="m_7780462313757425357gmail_msg">
+    // input vector.<br class="m_7780462313757425357gmail_msg">
+    bool MadeChange = false;<br class="m_7780462313757425357gmail_msg">
+    Value *Arg1 = II->getArgOperand(1);<br class="m_7780462313757425357gmail_msg">
+    Value *Arg2 = II->getArgOperand(2);<br class="m_7780462313757425357gmail_msg">
+    unsigned VWidth = Arg1->getType()-><wbr>getVectorNumElements();<br class="m_7780462313757425357gmail_msg">
+    if (Value *V = SimplifyDemandedVectorEltsLow(<wbr>Arg1, VWidth, 1)) {<br class="m_7780462313757425357gmail_msg">
+      II->setArgOperand(1, V);<br class="m_7780462313757425357gmail_msg">
+      MadeChange = true;<br class="m_7780462313757425357gmail_msg">
+    }<br class="m_7780462313757425357gmail_msg">
+    if (Value *V = SimplifyDemandedVectorEltsLow(<wbr>Arg2, VWidth, 1)) {<br class="m_7780462313757425357gmail_msg">
+      II->setArgOperand(2, V);<br class="m_7780462313757425357gmail_msg">
+      MadeChange = true;<br class="m_7780462313757425357gmail_msg">
+    }<br class="m_7780462313757425357gmail_msg">
+    if (MadeChange)<br class="m_7780462313757425357gmail_msg">
+      return II;<br class="m_7780462313757425357gmail_msg">
+    break;<br class="m_7780462313757425357gmail_msg">
+  }<br class="m_7780462313757425357gmail_msg">
+<br class="m_7780462313757425357gmail_msg">
   case Intrinsic::x86_sse41_round_ss:<br class="m_7780462313757425357gmail_msg">
   case Intrinsic::x86_sse41_round_sd: {<br class="m_7780462313757425357gmail_msg">
     // These intrinsics demand the upper elements of the first input vector and<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
<br class="m_7780462313757425357gmail_msg">
______________________________<wbr>_________________<br class="m_7780462313757425357gmail_msg">
llvm-commits mailing list<br class="m_7780462313757425357gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="m_7780462313757425357gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="m_7780462313757425357gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="m_7780462313757425357gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br class="m_7780462313757425357gmail_msg">
</blockquote></div>
</div></div></blockquote></div><br></div>