https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119181
--- Comment #6 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- void foo (int* a, int* __restrict b, int* c) { b[0] = a[0] * c[256]; b[1] = c[257] * a[1]; b[2] = a[2] * c[258]; b[3] = c[259] * a[3]; b[4] = c[260] * a[4]; b[5] = c[261] * a[5]; b[6] = a[6] * c[262]; b[7] = a[7] * c[263]; } BB vectorizer will retrying with swapped operand if different interleaving chains in one node. /app/example.cpp:4:10: note: Build SLP for _1 = *a_26(D); /app/example.cpp:4:10: note: Build SLP for _4 = MEM[(int *)c_27(D) + 1028B]; /app/example.cpp:4:10: missed: Build SLP failed: different interleaving chains in one node _4 = MEM[(int *)c_27(D) + 1028B]; /app/example.cpp:4:10: note: Build SLP for _7 = MEM[(int *)a_26(D) + 8B]; /app/example.cpp:4:10: note: Build SLP for _10 = MEM[(int *)c_27(D) + 1036B]; /app/example.cpp:4:10: missed: Build SLP failed: different interleaving chains in one node _10 = MEM[(int *)c_27(D) + 1036B]; /app/example.cpp:4:10: note: Build SLP for _13 = MEM[(int *)c_27(D) + 1040B]; /app/example.cpp:4:10: missed: Build SLP failed: different interleaving chains in one node _13 = MEM[(int *)c_27(D) + 1040B]; /app/example.cpp:4:10: note: Build SLP for _16 = MEM[(int *)c_27(D) + 1044B]; /app/example.cpp:4:10: missed: Build SLP failed: different interleaving chains in one node _16 = MEM[(int *)c_27(D) + 1044B]; /app/example.cpp:4:10: note: Build SLP for _19 = MEM[(int *)a_26(D) + 24B]; /app/example.cpp:4:10: note: Build SLP for _22 = MEM[(int *)a_26(D) + 28B]; /app/example.cpp:4:10: note: SLP discovery for node 0x10fbb9a0 failed /app/example.cpp:4:10: note: Re-trying with swapped operands of stmts 1 3 4 5 /app/example.cpp:4:10: note: starting SLP discovery for node 0x10fbba30 /app/example.cpp:4:10: note: get vectype for scalar type (group size 8): int /app/example.cpp:4:10: note: vectype: vector(8) int /app/example.cpp:4:10: note: nunits = 8 /app/example.cpp:4:10: note: Build SLP for _1 = *a_26(D); /app/example.cpp:4:10: note: Build SLP for _5 = MEM[(int *)a_26(D) + 4B]; /app/example.cpp:4:10: note: Build SLP for _7 = MEM[(int *)a_26(D) + 8B]; /app/example.cpp:4:10: note: Build SLP for _11 = MEM[(int *)a_26(D) + 12B]; /app/example.cpp:4:10: note: Build SLP for _14 = MEM[(int *)a_26(D) + 16B]; /app/example.cpp:4:10: note: Build SLP for _17 = MEM[(int *)a_26(D) + 20B]; /app/example.cpp:4:10: note: Build SLP for _19 = MEM[(int *)a_26(D) + 24B]; /app/example.cpp:4:10: note: Build SLP for _22 = MEM[(int *)a_26(D) + 28B]; /app/example.cpp:4:10: note: SLP discovery for node 0x10fbba30 succeeded /app/example.cpp:4:10: note: starting SLP discovery for node 0x10fbbac0 /app/example.cpp:4:10: note: get vectype for scalar type (group size 8): int /app/example.cpp:4:10: note: vectype: vector(8) int