<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - SROA: 3.7 generates vector select with undef, 3.8/trunk generates vector select with phi"
   href="https://llvm.org/bugs/show_bug.cgi?id=27808">27808</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>SROA: 3.7 generates vector select with undef, 3.8/trunk generates vector select with phi
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Scalar Optimizations
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>pjcoup@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=16385" name="attach_16385" title="sroa.ll">attachment 16385</a> <a href="attachment.cgi?id=16385&action=edit" title="sroa.ll">[details]</a></span>
sroa.ll

For the attached sroa.ll, trunk LLVM and 3.8 SROA generates seemingly poorer
code than 3.7 (phi + select with phi instead of select with undef):

@@ -10,6 +11,7 @@
   br label %for.cond

 for.cond:                                         ; preds = %for.body, %entry
+  %tmp.1.0 = phi <16 x i8> [ undef, %entry ], [ %tmp.1.0.vecblend, %for.body ]
   %i.0 = phi i32 [ 0, %entry ], [ %nexti, %for.body ]
   %cmp = icmp slt i32 %i.0, %n
   br i1 %cmp, label %for.body, label %for.cond.cleanup
@@ -22,7 +24,7 @@
   %b.1 = load <16 x i8>, <16 x i8>* %bidx.1, align 16
   %bld = shufflevector <16 x i8> %b.1, <16 x i8> undef, <4 x i32> <i32 0, i32
1, i32 2, i32 3>
   %tmp.1.0.vec.expand = shufflevector <4 x i8> %bld, <4 x i8> undef, <16 x
i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef,
i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef,
i32 undef>
-  %tmp.1.0.vecblend = select <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1
false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1
false, i1 false, i1 false, i1 false>, <16 x i8> %tmp.1.0.vec.expand, <16 x i8>
undef
+  %tmp.1.0.vecblend = select <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1
false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1
false, i1 false, i1 false, i1 false>, <16 x i8> %tmp.1.0.vec.expand, <16 x i8>
%tmp.1.0
   %cvt = call <4 x i32> @convert(<16 x i8> %tmp.1.0.vecblend)
   %aidx.1 = getelementptr <4 x i32>, <4 x i32>* %a, i32 %i.0
   store <4 x i32> %cvt, <4 x i32>* %aidx.1, align 16

Reproduce with opt -sroa sroa.ll
Is this an expected change for 3.8?</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>