https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83479
--- Comment #1 from Daniel Fruzynski <bugzi...@poradnik-webmastera.com> --- Here is clang 5.0 output, it is also shorted than gcc one (213 lines, gcc produced 247). test(double const (*) [8]): # @test(double const (*) [8]) vmovapd ymm3, ymmword ptr [rdi + 64] vmovapd ymm4, ymmword ptr [rdi + 128] vmovapd ymm5, ymmword ptr [rdi + 192] vmovapd ymm6, ymmword ptr [rdi + 256] vmovapd ymm8, ymmword ptr [rdi + 320] vmovapd ymm2, ymmword ptr [rdi + 384] vmovapd ymm1, ymmword ptr [rdi + 576] vsqrtpd ymm0, ymm1 vmovupd ymmword ptr [rsp - 56], ymm0 # 32-byte Spill vpermpd ymm7, ymm1, 85 # ymm7 = ymm1[1,1,1,1] vsqrtpd ymm9, ymm7 vmovapd ymm10, ymmword ptr [rdi + 448] vmulpd ymm7, ymm1, ymm7 vsubpd ymm3, ymm3, ymm7 vmulpd ymm3, ymm0, ymm3 vpermpd ymm7, ymm1, 170 # ymm7 = ymm1[2,2,2,2] vsqrtpd ymm11, ymm7 vmulpd ymm9, ymm9, ymm3 vmulpd ymm3, ymm1, ymm7 vsubpd ymm3, ymm4, ymm3 vmulpd ymm3, ymm0, ymm3 vpermpd ymm4, ymm1, 255 # ymm4 = ymm1[3,3,3,3] vsqrtpd ymm7, ymm4 vmulpd ymm11, ymm3, ymm11 vmulpd ymm3, ymm1, ymm4 vsubpd ymm3, ymm5, ymm3 vmulpd ymm3, ymm0, ymm3 vmulpd ymm4, ymm3, ymm7 vsqrtpd ymm7, ymm0 vmulpd ymm3, ymm1, ymm0 vsubpd ymm5, ymm6, ymm3 vmulpd ymm5, ymm0, ymm5 vmulpd ymm5, ymm5, ymm7 vsubpd ymm6, ymm8, ymm3 vmulpd ymm6, ymm0, ymm6 vmulpd ymm6, ymm6, ymm7 vsubpd ymm2, ymm2, ymm3 vmulpd ymm2, ymm0, ymm2 vmulpd ymm8, ymm2, ymm7 vsubpd ymm2, ymm10, ymm3 vmulpd ymm2, ymm0, ymm2 vmulpd ymm3, ymm2, ymm7 vsqrtpd ymm2, ymm3 vpermpd ymm10, ymm3, 85 # ymm10 = ymm3[1,1,1,1] vsqrtpd ymm12, ymm10 vmulpd ymm10, ymm3, ymm10 vsubpd ymm9, ymm9, ymm10 vmulpd ymm9, ymm2, ymm9 vmulpd ymm9, ymm12, ymm9 vpermpd ymm10, ymm3, 170 # ymm10 = ymm3[2,2,2,2] vsqrtpd ymm12, ymm10 vmulpd ymm10, ymm3, ymm10 vsubpd ymm10, ymm11, ymm10 vmulpd ymm10, ymm2, ymm10 vmulpd ymm10, ymm12, ymm10 vpermpd ymm11, ymm3, 255 # ymm11 = ymm3[3,3,3,3] vsqrtpd ymm12, ymm11 vmulpd ymm11, ymm3, ymm11 vsubpd ymm4, ymm4, ymm11 vmulpd ymm4, ymm2, ymm4 vmulpd ymm11, ymm4, ymm12 vmulpd ymm4, ymm3, ymm0 vsubpd ymm5, ymm5, ymm4 vmulpd ymm5, ymm2, ymm5 vmulpd ymm12, ymm7, ymm5 vsubpd ymm5, ymm6, ymm4 vmulpd ymm6, ymm2, ymm5 vsubpd ymm4, ymm8, ymm4 vmulpd ymm4, ymm2, ymm4 vmulpd ymm5, ymm7, ymm4 vsqrtpd ymm4, ymm5 vpermpd ymm8, ymm5, 85 # ymm8 = ymm5[1,1,1,1] vsqrtpd ymm13, ymm8 vmulpd ymm6, ymm7, ymm6 vmulpd ymm8, ymm5, ymm8 vsubpd ymm8, ymm9, ymm8 vmulpd ymm8, ymm4, ymm8 vpermpd ymm9, ymm5, 170 # ymm9 = ymm5[2,2,2,2] vsqrtpd ymm14, ymm9 vmulpd ymm13, ymm13, ymm8 vmulpd ymm8, ymm5, ymm9 vsubpd ymm8, ymm10, ymm8 vmulpd ymm8, ymm4, ymm8 vpermpd ymm9, ymm5, 255 # ymm9 = ymm5[3,3,3,3] vsqrtpd ymm10, ymm9 vmulpd ymm14, ymm8, ymm14 vmulpd ymm8, ymm5, ymm9 vsubpd ymm8, ymm11, ymm8 vmulpd ymm8, ymm4, ymm8 vmulpd ymm9, ymm8, ymm10 vmulpd ymm8, ymm5, ymm0 vsubpd ymm10, ymm12, ymm8 vmulpd ymm10, ymm4, ymm10 vmulpd ymm10, ymm7, ymm10 vsubpd ymm6, ymm6, ymm8 vmulpd ymm6, ymm4, ymm6 vmulpd ymm8, ymm7, ymm6 vsqrtpd ymm6, ymm8 vpermpd ymm11, ymm8, 85 # ymm11 = ymm8[1,1,1,1] vsqrtpd ymm12, ymm11 vmulpd ymm11, ymm8, ymm11 vsubpd ymm11, ymm13, ymm11 vmulpd ymm11, ymm6, ymm11 vmulpd ymm11, ymm11, ymm12 vpermpd ymm12, ymm8, 170 # ymm12 = ymm8[2,2,2,2] vsqrtpd ymm13, ymm12 vmulpd ymm12, ymm8, ymm12 vsubpd ymm12, ymm14, ymm12 vmulpd ymm12, ymm6, ymm12 vmulpd ymm12, ymm12, ymm13 vpermpd ymm13, ymm8, 255 # ymm13 = ymm8[3,3,3,3] vsqrtpd ymm14, ymm13 vmulpd ymm13, ymm8, ymm13 vsubpd ymm13, ymm9, ymm13 vmulpd ymm9, ymm8, ymm0 vsubpd ymm9, ymm10, ymm9 vmulpd ymm9, ymm9, ymm6 vmulpd ymm9, ymm7, ymm9 vsqrtpd ymm7, ymm9 vpermpd ymm10, ymm9, 85 # ymm10 = ymm9[1,1,1,1] vsqrtpd ymm15, ymm10 vmulpd ymm13, ymm6, ymm13 vmulpd ymm13, ymm13, ymm14 vmulpd ymm10, ymm9, ymm10 vsubpd ymm10, ymm11, ymm10 vpermpd ymm11, ymm9, 170 # ymm11 = ymm9[2,2,2,2] vsqrtpd ymm14, ymm11 vmulpd ymm10, ymm10, ymm7 vmulpd ymm15, ymm10, ymm15 vmulpd ymm10, ymm9, ymm11 vsubpd ymm10, ymm12, ymm10 vpermpd ymm11, ymm9, 255 # ymm11 = ymm9[3,3,3,3] vsqrtpd ymm12, ymm11 vmulpd ymm0, ymm10, ymm7 vmulpd ymm10, ymm9, ymm11 vsubpd ymm10, ymm13, ymm10 vmulpd ymm10, ymm7, ymm10 vmulpd ymm11, ymm10, ymm12 vsqrtpd ymm10, ymm11 vpermpd ymm12, ymm11, 85 # ymm12 = ymm11[1,1,1,1] vsqrtpd ymm13, ymm12 vmulpd ymm0, ymm0, ymm14 vmulpd ymm12, ymm11, ymm12 vsubpd ymm12, ymm15, ymm12 vmulpd ymm12, ymm10, ymm12 vpermpd ymm14, ymm11, 170 # ymm14 = ymm11[2,2,2,2] vsqrtpd ymm15, ymm14 vmulpd ymm12, ymm13, ymm12 vmulpd ymm13, ymm11, ymm14 vsubpd ymm0, ymm0, ymm13 vmulpd ymm0, ymm10, ymm0 vmulpd ymm13, ymm15, ymm0 vsqrtpd ymm0, ymm13 vmovupd ymmword ptr [rsp - 88], ymm0 # 32-byte Spill vpermpd ymm14, ymm13, 85 # ymm14 = ymm13[1,1,1,1] vsqrtpd ymm15, ymm14 vmulpd ymm14, ymm13, ymm14 vsubpd ymm12, ymm12, ymm14 vmulpd ymm12, ymm0, ymm12 vmulpd ymm14, ymm15, ymm12 vbroadcastsd ymm12, xmm1 vmulpd ymm1, ymm1, ymm12 vmovsd xmm0, qword ptr [rdi] # xmm0 = mem[0],zero vsubsd xmm0, xmm0, xmm1 vmulsd xmm0, xmm0, qword ptr [rsp - 56] # 16-byte Folded Reload vsqrtpd ymm1, ymm12 vmulsd xmm0, xmm1, xmm0 vbroadcastsd ymm1, xmm3 vmulpd ymm3, ymm3, ymm1 vsubsd xmm0, xmm0, xmm3 vmulsd xmm0, xmm2, xmm0 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm1, xmm0 vbroadcastsd ymm1, xmm5 vmulpd ymm2, ymm5, ymm1 vsubsd xmm0, xmm0, xmm2 vmulsd xmm0, xmm4, xmm0 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm1, xmm0 vbroadcastsd ymm1, xmm8 vmulpd ymm2, ymm8, ymm1 vsubsd xmm0, xmm0, xmm2 vmulsd xmm0, xmm6, xmm0 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm1, xmm0 vbroadcastsd ymm1, xmm9 vmulpd ymm2, ymm9, ymm1 vsubsd xmm0, xmm0, xmm2 vmulsd xmm0, xmm0, xmm7 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm0, xmm1 vbroadcastsd ymm1, xmm11 vmulpd ymm2, ymm11, ymm1 vsubsd xmm0, xmm0, xmm2 vmulsd xmm0, xmm10, xmm0 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm1, xmm0 vbroadcastsd ymm1, xmm13 vmulpd ymm2, ymm13, ymm1 vsubsd xmm0, xmm0, xmm2 vsqrtpd ymm1, ymm1 vmulsd xmm0, xmm0, qword ptr [rsp - 88] # 16-byte Folded Reload vbroadcastsd ymm2, xmm14 vmulsd xmm0, xmm1, xmm0 vmulpd ymm1, ymm14, ymm2 vsubsd xmm0, xmm0, xmm1 vsqrtpd ymm1, ymm14 vmulsd xmm0, xmm1, xmm0 vsqrtpd ymm1, ymm2 vmulsd xmm0, xmm1, xmm0 vzeroupper ret