[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