https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96654
Bug ID: 96654 Summary: Failure to optimize vectorized conversion to `int` with AVX Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- void f(double *src, int *dst) { for (int i = 0; i < 4; i ++) dst[i] = (int)src[i]; } With -O3 -mavx, LLVM outputs this : f(double*, int*): vcvttpd2dq xmm0, ymmword ptr [rdi] vmovupd xmmword ptr [rsi], xmm0 ret GCC outputs this : f(double*, int*): push rbp vmovupd xmm1, XMMWORD PTR [rdi] vinsertf128 ymm0, ymm1, XMMWORD PTR [rdi+16], 0x1 mov rbp, rsp vcvttpd2dq xmm0, ymm0 vmovdqu XMMWORD PTR [rsi], xmm0 vzeroupper pop rbp ret