https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91735
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-* Status|UNCONFIRMED |NEW Known to work| |8.3.1 Version|unknown |9.1.0 Keywords| |missed-optimization Last reconfirmed| |2019-09-11 CC| |rguenth at gcc dot gnu.org, | |rsandifo at gcc dot gnu.org Blocks| |53947, 26163 Ever confirmed|0 |1 Summary|Runtime regression for |[9/10 Regression] Runtime |SPEC2000 177.mesa on |regression for SPEC2000 |Haswell around the end of |177.mesa on Haswell around |August 2018 |the end of August 2018 Target Milestone|--- |9.3 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- From the testers data last good r263752, first bad r263787. Bisecting points to Richards vectorizer series r26377[1-4], more specifically r263772. Perf shows nothing conclusive but all functions slower by the same percentage. SPEC 2000 build scripts are oddly redirecting and mangling output so -fopt-info output is illegible. Huh, or rather it's even in the dumps when dumping with -optimized: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: polygon.c:140:4: note: loop vectorized using 32 byte vectors anyhow, differences are for example: fog.c:157:10: note: loop vectorized using 32 byte vectors +fog.c:157:10: note: fog.c:157:10: note: loop versioned for vectorization because of possible aliasing the above is void gl_fog_color_vertices( GLcontext *ctx, GLuint n, GLfloat v[][4], GLubyte color[][4] ) ... case GL_EXP: d = -ctx->Fog.Density; for (i=0;i<n;i++) { GLfloat f = exp( d * ABSF(v[i][2]) ); f = CLAMP( f, 0.0F, 1.0F ); color[i][0] = f * color[i][0] + (1.0F-f) * fogr; color[i][1] = f * color[i][1] + (1.0F-f) * fogg; color[i][2] = f * color[i][2] + (1.0F-f) * fogb; } and the testcase void foo (unsigned int n, float v[][4], unsigned char color[][4], float fogr, float fogg, float fogb) { for (unsigned int i = 0; i < n; ++i) { float f = v[i][2]; color[i][0] = f * color[i][0] + (1.0F-f) * fogr; color[i][1] = f * color[i][1] + (1.0F-f) * fogg; color[i][2] = f * color[i][2] + (1.0F-f) * fogb; } } at r263771 vectorizes to foo: .LFB0: .cfi_startproc testl %edi, %edi je .L8 leal -1(%rdi), %eax vmovss .LC0(%rip), %xmm7 addq $8, %rsi leaq 4(%rdx,%rax,4), %rcx .p2align 4,,10 .p2align 3 .L3: vmovss (%rsi), %xmm6 movzbl (%rdx), %eax vxorps %xmm4, %xmm4, %xmm4 addq $4, %rdx addq $16, %rsi vcvtsi2ss %eax, %xmm4, %xmm4 vsubss %xmm6, %xmm7, %xmm5 vmulss %xmm0, %xmm5, %xmm3 vfmadd132ss %xmm6, %xmm3, %xmm4 vmulss %xmm1, %xmm5, %xmm3 vmulss %xmm2, %xmm5, %xmm5 vcvttss2si %xmm4, %eax vxorps %xmm4, %xmm4, %xmm4 movb %al, -4(%rdx) movzbl -3(%rdx), %eax vcvtsi2ss %eax, %xmm4, %xmm4 vfmadd132ss %xmm6, %xmm3, %xmm4 vxorps %xmm3, %xmm3, %xmm3 vcvttss2si %xmm4, %eax movb %al, -3(%rdx) movzbl -2(%rdx), %eax vcvtsi2ss %eax, %xmm3, %xmm3 vfmadd132ss %xmm6, %xmm5, %xmm3 vcvttss2si %xmm3, %eax movb %al, -2(%rdx) cmpq %rdx, %rcx jne .L3 .L8: ret while at the next rev it is foo: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 andq $-32, %rsp subq $520, %rsp vmovss %xmm0, -92(%rsp) vmovss %xmm1, -96(%rsp) vmovss %xmm2, -100(%rsp) testl %edi, %edi je .L20 movl %edi, %eax leaq 8(%rsi), %rcx leal -1(%rdi), %r8d leaq -1(%rdx,%rax,4), %r9 cmpq %r9, %rcx setnb %r9b salq $4, %rax leaq -4(%rsi,%rax), %rax cmpq %rax, %rdx setnb %al orb %al, %r9b je .L3 cmpl $31, %r8d jbe .L3 vmovaps %xmm0, %xmm4 vmovaps %xmm1, %xmm5 vunpcklps %xmm2, %xmm1, %xmm0 movl %r8d, %r9d vunpcklps %xmm4, %xmm2, %xmm1 vunpcklps %xmm5, %xmm4, %xmm2 shrl $5, %r9d movq %rdx, %rax vmovlhps %xmm2, %xmm0, %xmm3 vmovlhps %xmm0, %xmm1, %xmm0 vmovlhps %xmm1, %xmm2, %xmm1 salq $7, %r9 vinsertf128 $0x1, %xmm0, %ymm3, %ymm5 vmovaps .LC11(%rip), %ymm15 addq %rdx, %r9 vmovaps %ymm5, 488(%rsp) vinsertf128 $0x1, %xmm1, %ymm0, %ymm5 vmovaps %ymm5, -88(%rsp) vinsertf128 $0x1, %xmm3, %ymm1, %ymm5 vmovaps %ymm5, 456(%rsp) .p2align 4,,10 .p2align 3 .L4: vmovups 32(%rcx), %ymm4 vunpcklps 64(%rcx), %ymm4, %ymm14 subq $-128, %rax addq $512, %rcx vmovdqa .LC1(%rip), %ymm4 vmovups -352(%rcx), %ymm3 vunpcklps -320(%rcx), %ymm3, %ymm11 vmovups -320(%rcx), %ymm3 vpermd %ymm14, %ymm4, %ymm7 vmovups -448(%rcx), %ymm4 vunpcklps -416(%rcx), %ymm4, %ymm13 vmovdqa .LC2(%rip), %ymm4 vunpcklps -288(%rcx), %ymm3, %ymm10 vmovdqa .LC1(%rip), %ymm6 vmovups -256(%rcx), %ymm3 vpermd %ymm13, %ymm4, %ymm13 vmovups -384(%rcx), %ymm4 vunpcklps -352(%rcx), %ymm4, %ymm12 vmovdqa .LC0(%rip), %ymm4 vunpcklps -224(%rcx), %ymm3, %ymm9 vmovups -224(%rcx), %ymm3 vunpcklps -192(%rcx), %ymm3, %ymm8 vpermd %ymm12, %ymm4, %ymm12 vmovdqa .LC1(%rip), %ymm4 vmovups -512(%rcx), %ymm5 vmovups -192(%rcx), %ymm3 vunpcklps -480(%rcx), %ymm5, %ymm0 vpermd %ymm11, %ymm4, %ymm11 vmovdqa .LC2(%rip), %ymm4 vunpcklps -160(%rcx), %ymm3, %ymm3 vmovdqa .LC0(%rip), %ymm5 vpermd %ymm10, %ymm4, %ymm10 vmovdqa .LC0(%rip), %ymm4 vpermd %ymm0, %ymm5, %ymm5 vmovdqa %ymm5, 424(%rsp) vpermd %ymm9, %ymm4, %ymm9 vpermd %ymm8, %ymm6, %ymm4 vmovdqa .LC2(%rip), %ymm6 vmovdqa %ymm4, 200(%rsp) vpermd %ymm3, %ymm6, %ymm3 vmovups -128(%rcx), %ymm6 vunpcklps -96(%rcx), %ymm6, %ymm0 vmovdqa %ymm3, 168(%rsp) vmovdqa .LC0(%rip), %ymm2 vmovdqu -96(%rax), %ymm5 vmovdqa .LC2(%rip), %ymm1 vmovdqu -128(%rax), %ymm14 vmovdqa %ymm7, 392(%rsp) vpermd %ymm0, %ymm2, %ymm6 vmovups -96(%rcx), %ymm2 vunpcklps -64(%rcx), %ymm2, %ymm0 vpshufb .LC4(%rip), %ymm5, %ymm3 vmovdqa .LC1(%rip), %ymm2 vmovaps -88(%rsp), %ymm7 vmovdqa %ymm6, 136(%rsp) vmovdqa %ymm13, 360(%rsp) vmovdqu -64(%rax), %ymm6 vsubps 360(%rsp), %ymm15, %ymm13 vmovdqa %ymm12, 328(%rsp) vpermd %ymm0, %ymm2, %ymm2 vmovups -64(%rcx), %ymm0 vunpcklps -32(%rcx), %ymm0, %ymm0 vpshufb .LC7(%rip), %ymm6, %ymm4 vmovdqa %ymm2, 104(%rsp) vpermd %ymm0, %ymm1, %ymm0 vmovdqu -128(%rax), %ymm1 vpermq $78, %ymm4, %ymm4 vmovdqa %ymm0, 72(%rsp) vpshufb .LC5(%rip), %ymm14, %ymm0 vmovdqu -32(%rax), %ymm14 vpshufb .LC3(%rip), %ymm1, %ymm2 vpermq $78, %ymm3, %ymm1 vpermq $78, %ymm2, %ymm2 vpor %ymm2, %ymm0, %ymm3 vpshufb .LC6(%rip), %ymm5, %ymm2 vpshufb .LC8(%rip), %ymm5, %ymm0 vpor %ymm1, %ymm3, %ymm3 vpermq $78, %ymm2, %ymm2 vpshufb .LC3(%rip), %ymm6, %ymm1 vpor %ymm4, %ymm1, %ymm1 vpor %ymm2, %ymm0, %ymm2 vpshufb .LC8(%rip), %ymm14, %ymm4 vpor %ymm1, %ymm2, %ymm2 vpermq $78, %ymm4, %ymm4 vpshufb .LC9(%rip), %ymm6, %ymm1 vpermq $78, %ymm1, %ymm1 vpmovzxbw %xmm3, %ymm6 vextracti128 $0x1, %ymm3, %xmm3 vpshufb .LC10(%rip), %ymm14, %ymm0 vpmovzxbw %xmm3, %ymm3 vpmovzxbw %xmm2, %ymm5 vpor %ymm4, %ymm0, %ymm0 vextracti128 $0x1, %ymm2, %xmm2 vsubps 392(%rsp), %ymm15, %ymm14 vpor %ymm0, %ymm1, %ymm1 vpmovzxbw %xmm2, %ymm2 vmovaps 488(%rsp), %ymm0 vsubps 328(%rsp), %ymm15, %ymm12 vmovdqa %ymm10, 264(%rsp) vpmovzxbw %xmm1, %ymm4 vsubps 264(%rsp), %ymm15, %ymm10 vmovaps 456(%rsp), %ymm8 vmulps %ymm0, %ymm13, %ymm13 vextracti128 $0x1, %ymm1, %xmm1 vmovdqa %ymm9, 232(%rsp) vsubps 232(%rsp), %ymm15, %ymm9 vmovdqa %ymm11, 296(%rsp) vmulps %ymm8, %ymm12, %ymm12 vpmovzxbw %xmm1, %ymm1 vsubps 296(%rsp), %ymm15, %ymm11 vmulps %ymm0, %ymm10, %ymm10 vsubps 168(%rsp), %ymm15, %ymm0 vmulps 488(%rsp), %ymm0, %ymm0 vmulps %ymm8, %ymm9, %ymm9 vsubps 200(%rsp), %ymm15, %ymm8 vmulps %ymm7, %ymm14, %ymm14 vmulps %ymm7, %ymm11, %ymm11 vmulps %ymm7, %ymm8, %ymm8 vmovaps %ymm0, 40(%rsp) vsubps 136(%rsp), %ymm15, %ymm0 vmulps 456(%rsp), %ymm0, %ymm0 vmovaps %ymm0, 8(%rsp) vsubps 104(%rsp), %ymm15, %ymm0 vmulps %ymm7, %ymm0, %ymm7 vsubps 72(%rsp), %ymm15, %ymm0 vmulps 488(%rsp), %ymm0, %ymm0 vmovaps %ymm7, -24(%rsp) vpmovzxwd %xmm6, %ymm7 vextracti128 $0x1, %ymm6, %xmm6 vmovaps %ymm0, -56(%rsp) vcvtdq2ps %ymm7, %ymm7 vpmovzxwd %xmm6, %ymm6 vsubps 424(%rsp), %ymm15, %ymm0 vmulps 456(%rsp), %ymm0, %ymm0 vcvtdq2ps %ymm6, %ymm6 vfmadd231ps 392(%rsp), %ymm6, %ymm14 vpmovzxwd %xmm5, %ymm6 vfmadd231ps 424(%rsp), %ymm7, %ymm0 vpmovzxwd %xmm3, %ymm7 vextracti128 $0x1, %ymm3, %xmm3 vcvtdq2ps %ymm6, %ymm6 vpmovzxwd %xmm3, %ymm3 vextracti128 $0x1, %ymm5, %xmm5 vcvtdq2ps %ymm7, %ymm7 vcvtdq2ps %ymm3, %ymm3 vpmovzxwd %xmm5, %ymm5 vfmadd231ps 328(%rsp), %ymm3, %ymm12 vpmovzxwd %xmm2, %ymm3 vextracti128 $0x1, %ymm2, %xmm2 vcvtdq2ps %ymm5, %ymm5 vcvtdq2ps %ymm3, %ymm3 vfmadd231ps 296(%rsp), %ymm6, %ymm11 vpmovzxwd %xmm2, %ymm2 vcvttps2dq %ymm14, %ymm14 vfmadd231ps 264(%rsp), %ymm5, %ymm10 vmovaps 168(%rsp), %ymm5 vfmadd231ps 232(%rsp), %ymm3, %ymm9 vcvtdq2ps %ymm2, %ymm2 vpmovzxwd %xmm4, %ymm3 vcvttps2dq %ymm0, %ymm0 vfmadd231ps 200(%rsp), %ymm2, %ymm8 vcvtdq2ps %ymm3, %ymm3 vpmovzxwd %xmm1, %ymm2 vextracti128 $0x1, %ymm4, %xmm4 vfmadd213ps 40(%rsp), %ymm3, %ymm5 vextracti128 $0x1, %ymm1, %xmm1 vpmovzxwd %xmm4, %ymm4 vcvtdq2ps %ymm2, %ymm2 vpmovzxwd %xmm1, %ymm1 vcvtdq2ps %ymm4, %ymm4 vcvttps2dq %ymm11, %ymm11 vcvttps2dq %ymm12, %ymm12 vfmadd231ps 360(%rsp), %ymm7, %ymm13 vmovaps 8(%rsp), %ymm3 vcvtdq2ps %ymm1, %ymm1 vcvttps2dq %ymm10, %ymm10 vpand .LC12(%rip), %ymm0, %ymm0 vmovaps -24(%rsp), %ymm7 vcvttps2dq %ymm9, %ymm9 vpand .LC12(%rip), %ymm14, %ymm14 vfmadd132ps 104(%rsp), %ymm7, %ymm2 vcvttps2dq %ymm8, %ymm8 vpand .LC12(%rip), %ymm11, %ymm11 vpand .LC12(%rip), %ymm10, %ymm10 vfmadd132ps 136(%rsp), %ymm3, %ymm4 vpackusdw %ymm14, %ymm0, %ymm14 vmovaps -56(%rsp), %ymm3 vfmadd132ps 72(%rsp), %ymm3, %ymm1 vpackusdw %ymm10, %ymm11, %ymm10 vpand .LC12(%rip), %ymm9, %ymm0 vcvttps2dq %ymm13, %ymm13 vpand .LC12(%rip), %ymm8, %ymm8 vpermq $216, %ymm10, %ymm6 vpermq $216, %ymm14, %ymm14 vpand .LC12(%rip), %ymm13, %ymm3 vpand .LC12(%rip), %ymm12, %ymm12 vcvttps2dq %ymm2, %ymm2 vpackusdw %ymm8, %ymm0, %ymm0 vpand .LC13(%rip), %ymm6, %ymm6 vpand .LC12(%rip), %ymm2, %ymm2 vpermq $216, %ymm0, %ymm0 vpand .LC13(%rip), %ymm0, %ymm0 vpackusdw %ymm12, %ymm3, %ymm3 vcvttps2dq %ymm4, %ymm4 vcvttps2dq %ymm1, %ymm1 vpand .LC12(%rip), %ymm4, %ymm4 vpand .LC12(%rip), %ymm1, %ymm1 vpermq $216, %ymm3, %ymm3 vpackuswb %ymm0, %ymm6, %ymm6 vcvttps2dq %ymm5, %ymm0 vpand .LC12(%rip), %ymm0, %ymm0 vpand .LC13(%rip), %ymm14, %ymm7 vpand .LC13(%rip), %ymm3, %ymm3 vpackusdw %ymm1, %ymm2, %ymm1 vpermq $216, %ymm6, %ymm6 vpackusdw %ymm4, %ymm0, %ymm0 vpermq $216, %ymm1, %ymm1 vpand .LC13(%rip), %ymm1, %ymm1 vpackuswb %ymm3, %ymm7, %ymm7 vpermq $216, %ymm0, %ymm0 vpand .LC13(%rip), %ymm0, %ymm0 vpermq $216, %ymm7, %ymm7 vpextrb $0, %xmm7, -128(%rax) vpextrb $1, %xmm7, -127(%rax) vpextrb $2, %xmm7, -126(%rax) vpextrb $3, %xmm7, -124(%rax) vpextrb $4, %xmm7, -123(%rax) vpextrb $5, %xmm7, -122(%rax) vpackuswb %ymm1, %ymm0, %ymm0 vpextrb $6, %xmm7, -120(%rax) vpextrb $7, %xmm7, -119(%rax) vpextrb $8, %xmm7, -118(%rax) vpermq $216, %ymm0, %ymm0 vpextrb $9, %xmm7, -116(%rax) vpextrb $10, %xmm7, -115(%rax) vpextrb $11, %xmm7, -114(%rax) vpextrb $12, %xmm7, -112(%rax) vpextrb $13, %xmm7, -111(%rax) vpextrb $14, %xmm7, -110(%rax) vpextrb $15, %xmm7, -108(%rax) vextracti128 $0x1, %ymm7, %xmm7 vpextrb $0, %xmm6, -86(%rax) vpextrb $1, %xmm6, -84(%rax) vpextrb $2, %xmm6, -83(%rax) vpextrb $3, %xmm6, -82(%rax) vpextrb $4, %xmm6, -80(%rax) vpextrb $5, %xmm6, -79(%rax) vpextrb $6, %xmm6, -78(%rax) vpextrb $7, %xmm6, -76(%rax) vpextrb $8, %xmm6, -75(%rax) vpextrb $0, %xmm7, -107(%rax) vpextrb $1, %xmm7, -106(%rax) vpextrb $2, %xmm7, -104(%rax) vpextrb $3, %xmm7, -103(%rax) vpextrb $4, %xmm7, -102(%rax) vpextrb $5, %xmm7, -100(%rax) vpextrb $6, %xmm7, -99(%rax) vpextrb $7, %xmm7, -98(%rax) vpextrb $8, %xmm7, -96(%rax) vpextrb $9, %xmm7, -95(%rax) vpextrb $10, %xmm7, -94(%rax) vpextrb $11, %xmm7, -92(%rax) vpextrb $12, %xmm7, -91(%rax) vpextrb $13, %xmm7, -90(%rax) vpextrb $14, %xmm7, -88(%rax) vpextrb $15, %xmm7, -87(%rax) vpextrb $9, %xmm6, -74(%rax) vpextrb $10, %xmm6, -72(%rax) vpextrb $11, %xmm6, -71(%rax) vpextrb $12, %xmm6, -70(%rax) vpextrb $13, %xmm6, -68(%rax) vpextrb $14, %xmm6, -67(%rax) vpextrb $15, %xmm6, -66(%rax) vextracti128 $0x1, %ymm6, %xmm6 vpextrb $0, %xmm0, -43(%rax) vpextrb $1, %xmm0, -42(%rax) vpextrb $2, %xmm0, -40(%rax) vpextrb $3, %xmm0, -39(%rax) vpextrb $4, %xmm0, -38(%rax) vpextrb $5, %xmm0, -36(%rax) vpextrb $6, %xmm0, -35(%rax) vpextrb $7, %xmm0, -34(%rax) vpextrb $8, %xmm0, -32(%rax) vpextrb $9, %xmm0, -31(%rax) vpextrb $0, %xmm6, -64(%rax) vpextrb $1, %xmm6, -63(%rax) vpextrb $2, %xmm6, -62(%rax) vpextrb $3, %xmm6, -60(%rax) vpextrb $4, %xmm6, -59(%rax) vpextrb $5, %xmm6, -58(%rax) vpextrb $6, %xmm6, -56(%rax) vpextrb $7, %xmm6, -55(%rax) vpextrb $8, %xmm6, -54(%rax) vpextrb $9, %xmm6, -52(%rax) vpextrb $10, %xmm6, -51(%rax) vpextrb $11, %xmm6, -50(%rax) vpextrb $12, %xmm6, -48(%rax) vpextrb $13, %xmm6, -47(%rax) vpextrb $14, %xmm6, -46(%rax) vpextrb $15, %xmm6, -44(%rax) vpextrb $10, %xmm0, -30(%rax) vpextrb $11, %xmm0, -28(%rax) vpextrb $12, %xmm0, -27(%rax) vpextrb $13, %xmm0, -26(%rax) vpextrb $14, %xmm0, -24(%rax) vpextrb $15, %xmm0, -23(%rax) vextracti128 $0x1, %ymm0, %xmm0 vpextrb $0, %xmm0, -22(%rax) vpextrb $1, %xmm0, -20(%rax) vpextrb $2, %xmm0, -19(%rax) vpextrb $3, %xmm0, -18(%rax) vpextrb $4, %xmm0, -16(%rax) vpextrb $5, %xmm0, -15(%rax) vpextrb $6, %xmm0, -14(%rax) vpextrb $7, %xmm0, -12(%rax) vpextrb $8, %xmm0, -11(%rax) vpextrb $9, %xmm0, -10(%rax) vpextrb $10, %xmm0, -8(%rax) vpextrb $11, %xmm0, -7(%rax) vpextrb $12, %xmm0, -6(%rax) vpextrb $13, %xmm0, -4(%rax) vpextrb $14, %xmm0, -3(%rax) vpextrb $15, %xmm0, -2(%rax) cmpq %r9, %rax jne .L4 vmovss -92(%rsp), %xmm5 vmovss -96(%rsp), %xmm6 andl $-32, %r8d vmovss .LC14(%rip), %xmm3 vmovss -100(%rsp), %xmm7 .p2align 4,,10 .p2align 3 .L5: movl %r8d, %eax vxorps %xmm2, %xmm2, %xmm2 incl %r8d movq %rax, %rcx salq $4, %rcx vmovss 8(%rsi,%rcx), %xmm0 leaq (%rdx,%rax,4), %rcx movzbl (%rcx), %eax vsubss %xmm0, %xmm3, %xmm1 vcvtsi2ss %eax, %xmm2, %xmm2 vmulss %xmm1, %xmm5, %xmm4 vfmadd132ss %xmm0, %xmm4, %xmm2 vmulss %xmm1, %xmm6, %xmm4 vmulss %xmm1, %xmm7, %xmm1 vcvttss2si %xmm2, %eax vxorps %xmm2, %xmm2, %xmm2 movb %al, (%rcx) movzbl 1(%rcx), %eax vcvtsi2ss %eax, %xmm2, %xmm2 vfmadd132ss %xmm0, %xmm4, %xmm2 vcvttss2si %xmm2, %eax vxorps %xmm2, %xmm2, %xmm2 movb %al, 1(%rcx) movzbl 2(%rcx), %eax vcvtsi2ss %eax, %xmm2, %xmm2 vfmadd132ss %xmm2, %xmm1, %xmm0 vcvttss2si %xmm0, %eax movb %al, 2(%rcx) cmpl %r8d, %edi ja .L5 vzeroupper .L20: leave .cfi_remember_state .cfi_def_cfa 7, 8 ret current trunk looks the same. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26163 [Bug 26163] [meta-bug] missed optimization in SPEC (2k17, 2k and 2k6 and 95) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947 [Bug 53947] [meta-bug] vectorizer missed-optimizations