[llvm-bugs] [Bug 34725] New: Compiler no longer optimizing 1 horizontal add/sub patterns after r310632

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Sep 25 17:18:53 PDT 2017


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

            Bug ID: 34725
           Summary: Compiler no longer optimizing 1 horizontal add/sub
                    patterns after r310632
           Product: new-bugs
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: douglas_yung at playstation.sony.com
                CC: llvm-bugs at lists.llvm.org

After upstream commit r310632, the compiler is no longer generating a
horizontal add/sub instruction for a particular add/sub + shuffle pattern.
There may be additional affected patterns that might be masked by the changes
made previously in r310260.

Consider this example (also fails if you use subtraction instead of addition):

__attribute__((noinline))
__m128 add_ps_002(__m128 a, __m128 b) {
  __m128 r = (__m128){ a[0] + a[1], a[2] + a[3], b[0] + b[1], b[2] + b[3] };
  return __builtin_shufflevector(r, a, 0, -1, 2, 3);
}

When compiling with "-S -O2 -march=bdver2", prior to r310632, the compiler
would produce the following assembly for this function:

vmovaps (%rcx), %xmm0
vhaddps (%rdx), %xmm0, %xmm0
retq

But after r310632, the compiler is now producing the following assembly:

vmovaps (%rdx), %xmm0
vmovaps (%rcx), %xmm1
vinsertps       $28, %xmm0, %xmm1, %xmm2 # xmm2 = xmm1[0],xmm0[0],zero,zero
vinsertps       $76, %xmm1, %xmm0, %xmm1 # xmm1 = xmm1[1],xmm0[1],zero,zero
vaddps  %xmm1, %xmm2, %xmm1
vpermilpd       $1, %xmm0, %xmm2 # xmm2 = xmm0[1,0]
vpermilps       $231, %xmm0, %xmm0 # xmm0 = xmm0[3,1,2,3]
vaddss  %xmm0, %xmm2, %xmm0
vpermilps       $212, %xmm1, %xmm1 # xmm1 = xmm1[0,1,1,3]
vinsertps       $48, %xmm0, %xmm1, %xmm0 # xmm0 = xmm1[0,1,2],xmm0[0]
retq

-- 
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/20170926/53808b5c/attachment-0001.html>


More information about the llvm-bugs mailing list