[llvm-bugs] [Bug 47436] New: Suboptimal vectorization

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Sep 6 06:14:39 PDT 2020


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

            Bug ID: 47436
           Summary: Suboptimal vectorization
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Loop Optimizer
          Assignee: unassignedbugs at nondot.org
          Reporter: david.bolvansky at gmail.com
                CC: llvm-bugs at lists.llvm.org

#include<stdint.h>

uint8_t data[16];
 void test(unsigned i)
{
        unsigned j;
        for (j = 0; j < 16; j++)
                data[j] = (i + j) >> 8;
}

Clang -O3 -march=haswell:
test(unsigned int):                               # @test(unsigned int)
        lea     eax, [rdi + 12]
        vmovd   xmm0, eax
        lea     eax, [rdi + 13]
        vpinsrd xmm0, xmm0, eax, 1
        lea     eax, [rdi + 14]
        vpinsrd xmm0, xmm0, eax, 2
        lea     eax, [rdi + 15]
        vpinsrd xmm0, xmm0, eax, 3
        lea     eax, [rdi + 8]
        vmovd   xmm1, eax
        lea     eax, [rdi + 9]
        vpinsrd xmm1, xmm1, eax, 1
        lea     eax, [rdi + 10]
        vpinsrd xmm1, xmm1, eax, 2
        lea     eax, [rdi + 11]
        vpinsrd xmm1, xmm1, eax, 3
        lea     eax, [rdi + 4]
        vmovd   xmm2, eax
        lea     eax, [rdi + 5]
        vpinsrd xmm2, xmm2, eax, 1
        lea     eax, [rdi + 6]
        vpinsrd xmm2, xmm2, eax, 2
        lea     eax, [rdi + 7]
        vpinsrd xmm2, xmm2, eax, 3
        lea     eax, [rdi + 1]
        vmovd   xmm3, edi
        vpinsrd xmm3, xmm3, eax, 1
        lea     eax, [rdi + 2]
        vpinsrd xmm3, xmm3, eax, 2
        lea     eax, [rdi + 3]
        vpinsrd xmm3, xmm3, eax, 3
        vinserti128     ymm0, ymm1, xmm0, 1
        vinserti128     ymm1, ymm3, xmm2, 1
        vmovdqa ymm2, ymmword ptr [rip + .LCPI0_0] # ymm2 =
[1,2,5,6,9,10,13,14,9,10,13,14,13,14,15,128,17,18,21,22,25,26,29,30,25,26,29,30,29,30,31,128]
        vpshufb ymm1, ymm1, ymm2
        vpermq  ymm1, ymm1, 232                 # ymm1 = ymm1[0,2,2,3]
        vmovdqa xmm3, xmmword ptr [rip + .LCPI0_1] # xmm3 =
[255,255,255,255,255,255,255,255]
        vpand   xmm1, xmm1, xmm3
        vpshufb ymm0, ymm0, ymm2
        vpermq  ymm0, ymm0, 232                 # ymm0 = ymm0[0,2,2,3]
        vpand   xmm0, xmm0, xmm3
        vpackuswb       xmm0, xmm1, xmm0
        vmovdqa xmmword ptr [rip + data], xmm0
        vzeroupper
        ret


GCC -O3 -march=haswell:
test(unsigned int):
        vmovd   xmm0, edi
        vmovdqa xmm2, XMMWORD PTR .LC2[rip]
        vpbroadcastw    xmm0, xmm0
        vpaddw  xmm1, xmm0, XMMWORD PTR .LC0[rip]
        vpaddw  xmm0, xmm0, XMMWORD PTR .LC1[rip]
        vpsrlw  xmm1, xmm1, 8
        vpsrlw  xmm0, xmm0, 8
        vpand   xmm1, xmm2, xmm1
        vpand   xmm2, xmm2, xmm0
        vpackuswb       xmm0, xmm1, xmm2
        vmovdqa XMMWORD PTR data[rip], xmm0
        ret


https://gcc.godbolt.org/z/zP4nWM

-- 
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/20200906/d5a5df14/attachment.html>


More information about the llvm-bugs mailing list