[llvm-bugs] [Bug 35712] New: Inneficient code without constexpr

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Dec 20 14:00:28 PST 2017


https://bugs.llvm.org/show_bug.cgi?id=35712

            Bug ID: 35712
           Summary: Inneficient code without constexpr
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: zamazan4ik at tut.by
                CC: llvm-bugs at lists.llvm.org

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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20171220/aef1b1df/attachment-0001.html>


More information about the llvm-bugs mailing list