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: unassignedclangb...@nondot.org Reporter: deadal...@gmail.com CC: dgre...@apple.com, llvm-bugs@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.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs