[llvm-bugs] [Bug 31400] New: clang 3.9 goes somewhat overboard optimizing a simple loop
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Dec 15 16:11:28 PST 2016
https://llvm.org/bugs/show_bug.cgi?id=31400
Bug ID: 31400
Summary: clang 3.9 goes somewhat overboard optimizing a simple
loop
Product: clang
Version: 3.9
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: deadalnix at gmail.com
CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
Classification: Unclassified
Sample code:
int pow(int num, int pow){
long res = num;
while(--pow > 0){
res *= num;
}
return res;
}
Codegen using O2/O3/Ofast :
.LCPI0_0:
.quad 1 # 0x1
.quad 1 # 0x1
.LCPI0_1:
.quad 1 # 0x1
pow(int, int): # @pow(int, int)
movsxd rcx, edi
cmp esi, 2
jl .LBB0_1
lea r10d, [rsi - 1]
cmp r10d, 16
jae .LBB0_4
mov rax, rcx
jmp .LBB0_15
.LBB0_1:
mov rax, rcx
ret
.LBB0_4:
mov r8d, r10d
and r8d, -16
mov r9d, r10d
and r9d, -16
je .LBB0_5
vmovq xmm0, rcx
mov eax, 1
vmovq xmm1, rax
vpunpcklqdq xmm0, xmm0, xmm1 # xmm0 = xmm0[0],xmm1[0]
vinserti128 ymm2, ymm0, xmmword ptr [rip + .LCPI0_0], 1
vmovq xmm0, rcx
vpbroadcastq ymm0, xmm0
lea edi, [r9 - 16]
mov edx, edi
shr edx, 4
lea eax, [rdx + 1]
and eax, 7
cmp edi, 112
jae .LBB0_8
vpbroadcastq ymm4, qword ptr [rip + .LCPI0_1]
vmovdqa ymm5, ymm4
vmovdqa ymm3, ymm4
jmp .LBB0_10
.LBB0_5:
mov rax, rcx
jmp .LBB0_15
.LBB0_8:
lea edi, [rax - 1]
sub edi, edx
vpbroadcastq ymm4, qword ptr [rip + .LCPI0_1]
vpsrlq ymm1, ymm0, 32
vmovdqa ymm5, ymm4
vmovdqa ymm3, ymm4
.LBB0_9: # =>This Inner Loop Header: Depth=1
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
add edi, 8
jne .LBB0_9
.LBB0_10:
test eax, eax
je .LBB0_13
neg eax
vpsrlq ymm1, ymm0, 32
.LBB0_12: # =>This Inner Loop Header: Depth=1
vpmuludq ymm6, ymm2, ymm0
vpmuludq ymm7, ymm2, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm2, ymm2, 32
vpmuludq ymm2, ymm2, ymm0
vpsllq ymm2, ymm2, 32
vpaddq ymm2, ymm6, ymm2
vpmuludq ymm6, ymm4, ymm0
vpmuludq ymm7, ymm4, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm4, ymm4, 32
vpmuludq ymm4, ymm4, ymm0
vpsllq ymm4, ymm4, 32
vpaddq ymm4, ymm6, ymm4
vpmuludq ymm6, ymm5, ymm0
vpmuludq ymm7, ymm5, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm5, ymm5, 32
vpmuludq ymm5, ymm5, ymm0
vpsllq ymm5, ymm5, 32
vpaddq ymm5, ymm6, ymm5
vpmuludq ymm6, ymm3, ymm0
vpmuludq ymm7, ymm3, ymm1
vpsllq ymm7, ymm7, 32
vpaddq ymm6, ymm6, ymm7
vpsrlq ymm3, ymm3, 32
vpmuludq ymm3, ymm3, ymm0
vpsllq ymm3, ymm3, 32
vpaddq ymm3, ymm6, ymm3
add eax, 1
jne .LBB0_12
.LBB0_13:
vpmuludq ymm0, ymm4, ymm2
vpsrlq ymm1, ymm2, 32
vpmuludq ymm1, ymm4, ymm1
vpsllq ymm1, ymm1, 32
vpaddq ymm0, ymm0, ymm1
vpsrlq ymm1, ymm4, 32
vpmuludq ymm1, ymm1, ymm2
vpsllq ymm1, ymm1, 32
vpaddq ymm0, ymm0, ymm1
vpmuludq ymm1, ymm5, ymm0
vpsrlq ymm2, ymm0, 32
vpmuludq ymm2, ymm5, ymm2
vpsllq ymm2, ymm2, 32
vpsrlq ymm4, ymm5, 32
vpmuludq ymm0, ymm4, ymm0
vpsllq ymm0, ymm0, 32
vpaddq ymm0, ymm1, ymm0
vpaddq ymm0, ymm2, ymm0
vpmuludq ymm1, ymm3, ymm0
vpsrlq ymm2, ymm0, 32
vpmuludq ymm2, ymm3, ymm2
vpsllq ymm2, ymm2, 32
vpsrlq ymm3, ymm3, 32
vpmuludq ymm0, ymm3, ymm0
vpsllq ymm0, ymm0, 32
vpaddq ymm0, ymm1, ymm0
vpaddq ymm0, ymm2, ymm0
vextracti128 xmm1, ymm0, 1
vpmuludq ymm2, ymm0, ymm1
vpsrlq ymm3, ymm1, 32
vpmuludq ymm3, ymm0, ymm3
vpsllq ymm3, ymm3, 32
vpsrlq ymm0, ymm0, 32
vpmuludq ymm0, ymm0, ymm1
vpsllq ymm0, ymm0, 32
vpaddq ymm0, ymm2, ymm0
vpaddq ymm0, ymm3, ymm0
vpshufd xmm1, xmm0, 78 # xmm1 = xmm0[2,3,0,1]
vpmuludq ymm2, ymm0, ymm1
vpsrlq ymm3, ymm1, 32
vpmuludq ymm3, ymm0, ymm3
vpsllq ymm3, ymm3, 32
vpsrlq ymm0, ymm0, 32
vpmuludq ymm0, ymm0, ymm1
vpsllq ymm0, ymm0, 32
vpaddq ymm0, ymm2, ymm0
vpaddq ymm0, ymm3, ymm0
vmovq rax, xmm0
cmp r10d, r9d
je .LBB0_16
sub esi, r8d
.LBB0_15: # =>This Inner Loop Header: Depth=1
add esi, -1
imul rax, rcx
cmp esi, 1
jg .LBB0_15
.LBB0_16:
vzeroupper
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/20161216/ec01fd79/attachment-0001.html>
More information about the llvm-bugs
mailing list