<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 - Inneficient code without constexpr"
   href="https://bugs.llvm.org/show_bug.cgi?id=35712">35712</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Inneficient code without constexpr
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </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>LLVM Codegen
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>zamazan4ik@tut.by
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>clang(trunk) with '-O3 -std=c++17' for this code:


unsigned test()
{
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int sum = 0;

    for(int i = 0;i < 10;++i)
    {
        for(int j = 0; j < 10; ++j)
        {
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }

    for(int i = 0; i < 10; ++i)
    {
        sum += arr[i];
    }

    return sum;
}


generates this:


test(): # @test()
  mov rax, qword ptr [rip + .L_ZZ4testvE3arr+32]
  mov qword ptr [rsp - 8], rax
  movaps xmm0, xmmword ptr [rip + .L_ZZ4testvE3arr+16]
  movaps xmmword ptr [rsp - 24], xmm0
  movaps xmm0, xmmword ptr [rip + .L_ZZ4testvE3arr]
  movaps xmmword ptr [rsp - 40], xmm0
  xor ecx, ecx
  mov rax, -9
  xor edx, edx
  jmp .LBB0_1
.LBB0_2: # in Loop: Header=BB0_1 Depth=1
  mov edx, dword ptr [rsp + 4*rax]
  mov ecx, dword ptr [rsp - 40]
  add rax, 1
.LBB0_1: # =>This Inner Loop Header: Depth=1
  mov dword ptr [rsp + 4*rax - 4], ecx
  mov dword ptr [rsp - 40], edx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 36]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 36], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 32]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 32], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 28]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 28], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 24]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 24], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 20]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 20], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 16]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 16], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 12]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 12], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 8]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 8], ecx
  mov ecx, dword ptr [rsp + 4*rax - 4]
  mov edx, dword ptr [rsp - 4]
  mov dword ptr [rsp + 4*rax - 4], edx
  mov dword ptr [rsp - 4], ecx
  test rax, rax
  jne .LBB0_2
  movdqu xmm0, xmmword ptr [rsp - 20]
  movdqu xmm1, xmmword ptr [rsp - 36]
  paddd xmm1, xmm0
  pshufd xmm0, xmm1, 78 # xmm0 = xmm1[2,3,0,1]
  paddd xmm0, xmm1
  pshufd xmm1, xmm0, 229 # xmm1 = xmm0[1,1,2,3]
  paddd xmm1, xmm0
  movd eax, xmm1
  add eax, dword ptr [rsp - 40]
  add eax, ecx
  ret
.L_ZZ4testvE3arr:
  .long 0 # 0x0
  .long 1 # 0x1
  .long 2 # 0x2
  .long 3 # 0x3
  .long 4 # 0x4
  .long 5 # 0x5
  .long 6 # 0x6
  .long 7 # 0x7
  .long 8 # 0x8
  .long 9 # 0x9


But as you see we can simply return just sum of digits from the array.</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>