<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </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 - [AVX-512] select + add can produce better sequence"
   href="https://bugs.llvm.org/show_bug.cgi?id=33674">33674</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[AVX-512] select + add can produce better sequence
          </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>All
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>Backend: X86
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>elena.demikhovsky@intel.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This is the simplified C-code:

    if (B[i] > 1)
      Sum += A[i];

  %8 = load <16 x i32>, <16 x i32>* %7, align 4, !dbg !27, !tbaa !30
  %9 = icmp sgt <16 x i32> %8, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32
1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %10 = getelementptr inbounds i32, i32* %0, i64 %4
  %11 = bitcast i32* %10 to <16 x i32>*
  %12 = call <16 x i32> @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %11, i32
4, <16 x i1> %9, <16 x i32> undef)
  %13 = select <16 x i1> %9, <16 x i32> %12, <16 x i32> zeroinitializer
  %14 = add nsw <16 x i32> %5, %13

This code generates the following sequence:

        vmovdqu32       zmm2, zmmword ptr [rsi + rax]
        vpcmpgtd        k1, zmm2, zmm0
        vmovdqu32       zmm2 {k1} {z}, zmmword ptr [rdi + rax]
        vmovdqa32       zmm2 {k1} {z}, zmm2
        vpaddd  zmm1, zmm1, zmm2

The better sequence:
        vpcmpd    k1, zmm3, ZMMWORD PTR [rsi+rcx*4], 1        
        vpaddd    zmm4{k1}, zmm4, ZMMWORD PTR [rdi+rcx*4]</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>