https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87804
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-10-30 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. The issue is two-fold, first the array 'b' has unknown stride because IPA cannot look through __builtin_GOMP_parallel, second dsin () ends up as clobbering memory - you probably have to mark it as pure, then we end up with a vectorized variant: .L4: movdqa .LC2(%rip), %xmm3 movdqa 48(%rsp), %xmm1 addq $32, %r14 paddd %xmm0, %xmm3 paddd %xmm0, %xmm1 movaps %xmm3, (%rsp) cvtdq2pd %xmm1, %xmm0 movaps %xmm1, 32(%rsp) call _ZGVbN2v_sin movdqa 32(%rsp), %xmm1 movaps %xmm0, 16(%rsp) pshufd $238, %xmm1, %xmm0 cvtdq2pd %xmm0, %xmm0 call _ZGVbN2v_sin movapd 16(%rsp), %xmm2 movaps %xmm0, -16(%r14) movdqa (%rsp), %xmm0 movaps %xmm2, -32(%r14) cmpq %r14, %rbx jne .L4 program test interface pure function DSIN(x) bind(C, NAME="sin") use,intrinsic :: iso_c_binding ... Does that fix the issue?