[llvm-bugs] [Bug 33249] New: LLVM generates far less than ideal code for cold functions (when optimizing for size)

via llvm-bugs llvm-bugs at lists.llvm.org
Wed May 31 15:32:26 PDT 2017


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

            Bug ID: 33249
           Summary: LLVM generates far less than ideal code for cold
                    functions (when optimizing for size)
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: davide at freebsd.org
                CC: davidxl at google.com, filcab at gmail.com,
                    llvm-bugs at lists.llvm.org, llvm-dev at redking.me.uk,
                    rafael.espindola at gmail.com,
                    simon.f.whittaker at gmail.com, wmi at google.com,
                    xinliangli at gmail.com

https://godbolt.org/g/kgGJxw

This function is cold, we should optimize for size (also at -O3), as GCC does:

winky(int):                              # @winky(int)
        mov     eax, 1
        movd    xmm2, eax
        movd    xmm0, edi
        pshufd  xmm1, xmm0, 0           # xmm1 = xmm0[0,0,0,0]
        punpckldq       xmm0, xmm2      # xmm0 =
xmm0[0],xmm2[0],xmm0[1],xmm2[1]
        pshufd  xmm2, xmm2, 80          # xmm2 = xmm2[0,0,1,1]
        punpckldq       xmm0, xmm2      # xmm0 =
xmm0[0],xmm2[0],xmm0[1],xmm2[1]
        mov     eax, 36
        pshufd  xmm2, xmm1, 245         # xmm2 = xmm1[1,1,3,3]
.LBB1_1:                                # =>This Inner Loop Header: Depth=1
        pshufd  xmm3, xmm0, 245         # xmm3 = xmm0[1,1,3,3]
        pmuludq xmm0, xmm1
        pshufd  xmm0, xmm0, 232         # xmm0 = xmm0[0,2,2,3]
        pmuludq xmm3, xmm2
        pshufd  xmm3, xmm3, 232         # xmm3 = xmm3[0,2,2,3]
        punpckldq       xmm0, xmm3      # xmm0 =
xmm0[0],xmm3[0],xmm0[1],xmm3[1]
        add     eax, -4
        jne     .LBB1_1
        pshufd  xmm1, xmm0, 78          # xmm1 = xmm0[2,3,0,1]
        pshufd  xmm2, xmm0, 245         # xmm2 = xmm0[1,1,3,3]
        pmuludq xmm0, xmm1
        pshufd  xmm0, xmm0, 232         # xmm0 = xmm0[0,2,2,3]
        pshufd  xmm1, xmm1, 245         # xmm1 = xmm1[1,1,3,3]
        pmuludq xmm1, xmm2
        pshufd  xmm1, xmm1, 232         # xmm1 = xmm1[0,2,2,3]
        punpckldq       xmm0, xmm1      # xmm0 =
xmm0[0],xmm1[0],xmm0[1],xmm1[1]
        pshufd  xmm1, xmm0, 229         # xmm1 = xmm0[1,1,2,3]
        pmuludq xmm1, xmm0
        pshufd  xmm1, xmm1, 232         # xmm1 = xmm1[0,2,2,3]
        pshufd  xmm0, xmm0, 245         # xmm0 = xmm0[1,1,3,3]
        pmuludq xmm0, xmm0
        pshufd  xmm0, xmm0, 232         # xmm0 = xmm0[0,2,2,3]
        punpckldq       xmm1, xmm0      # xmm1 =
xmm1[0],xmm0[0],xmm1[1],xmm0[1]
        movd    eax, xmm1
        ret

vs

winky(int):
        mov     eax, edi
        mov     edx, 36
.L6:
        imul    eax, edi
        dec     edx
        jne     .L6
        ret

-- 
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/20170531/720df973/attachment.html>


More information about the llvm-bugs mailing list