<div dir="ltr">I have a slight preference towards shufflevector, because it makes sequences of shuffles, where only some of the shuffles can be converted into selects (because the input and output vector sizes of the others don't match) simpler to reason about.<div><br><div>I'm not sure this is a particularly good reason, though.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 29, 2016 at 8:19 AM, Philip Reames via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@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">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <p>I don't have a strong preference, though it is clear we should
      pick one.  I'd mildly prefer the select form for readability. 
      From an optimization standpoint, I see reasonable arguments for
      either.  <br>
    </p>
    <p>Philip<br>
    </p><div><div class="h5">
    <br>
    <div class="m_-1530628632641984312moz-cite-prefix">On 08/28/2016 12:37 PM, Sanjay Patel
      via llvm-dev wrote:<br>
    </div>
    </div></div><blockquote type="cite"><div><div class="h5">
      <div dir="ltr">
        <div>A vector select with a constant vector condition operand:<br>
          <br>
          define <4 x i32> @foo(<4 x i32> %a, <4 x
          i32> %b) {<br>
            %sel = select <4 x i1> <i1 true, i1 false, i1
          false, i1 true>, <4 x i32> %a, <4 x i32> %b<br>
            ret <4 x i32> %sel<br>
          }<br>
          <br>
          <br>
          ...is equivalent to a shufflevector:<br>
          <br>
          define <4 x i32> @goo(<4 x i32> %a, <4 x
          i32> %b) {<br>
            %shuf = shufflevector <4 x i32> %a, <4 x i32>
          %b, <4 x i32> <i32 0, i32 5, i32 6, i32 3><br>
            ret <4 x i32> %shuf<br>
          }<br>
          <br>
          <br>
          For the goal of canonicalization in IR, which of these should
          we prefer? Some backend / lowering differences for AArch64 and
          PPC are noted in:<br>
          <a href="https://llvm.org/bugs/show_bug.cgi?id=28530" target="_blank">https://llvm.org/bugs/show_<wbr>bug.cgi?id=28530</a><br>
          <a href="https://llvm.org/bugs/show_bug.cgi?id=28531" target="_blank">https://llvm.org/bugs/show_<wbr>bug.cgi?id=28531</a><br>
          <br>
        </div>
        x86 converts either form optimally in all cases I've looked at.<br>
        <div><br>
          This question first came up in D22114 ( <a href="https://reviews.llvm.org/D22114" target="_blank">https://reviews.llvm.org/<wbr>D22114</a>
          ) and is extended in D23886 ( <a href="https://reviews.llvm.org/D23886" target="_blank">https://reviews.llvm.org/<wbr>D23886</a>
          ) with a constant value example.<br>
          <br>
        </div>
      </div>
      <br>
      <fieldset class="m_-1530628632641984312mimeAttachmentHeader"></fieldset>
      <br>
      </div></div><pre>______________________________<wbr>_________________
LLVM Developers mailing list
<a class="m_-1530628632641984312moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a class="m_-1530628632641984312moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
  </div>

<br>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>