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