https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111683
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org Keywords|needs-bisection | --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r7-3163-g973625a04b3d9351f2485e37f7d3382af2aed87e Slightly reduced: #include <emmintrin.h> void convn_script(const double in9[10], const double in10[7], double out5[16]) { int iB = 0; int iC = 0; __builtin_memset(&out5[0], 0, 16U * sizeof(double)); for (int i = 0; i < 7; i++) { int b_i; int vectorUB; if (i + 10 <= 15) b_i = 9; else b_i = 15 - i; vectorUB = (((b_i + 1) / 2) << 1) - 2; for (int r = 0; r <= vectorUB; r += 2) { __m128d b_r; b_i = iC + r; b_r = _mm_loadu_pd(&out5[b_i]); _mm_storeu_pd(&out5[b_i], _mm_add_pd(b_r, _mm_mul_pd(_mm_set1_pd(in10[iB]), _mm_loadu_pd(&in9[r])))); } iC = iB + 1; iB++; } } int main() { double in9[10] = {0.8147, 0.9058, 0.1270, 0.9134, 0.6324, 0.0975, 0.2785, 0.5469, 0.9575, 0.9649}; double in10[7] = {0.1576, 0.9706, 0.9572, 0.4854, 0.8003, 0.1419, 0.4218}; double out5[16]; convn_script(in9, in10, out5); for(int i = 0; i < 16; i++) __builtin_printf ("%d %f\n", i, out5[i]); }