https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121007
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reduced -mcpu=power9 -O2: typedef struct { int a; } A; unsigned char *a; char b; int c; void foo (vector char, vector char, vector char); void bar (long stride) { vector char v0, v1, v2, v3, v4, v5; vector char r0 = __builtin_vec_vsx_ld (0, a); vector char r2 = __builtin_vec_vsx_ld (2 * stride, a - 3); vector char r3 = __builtin_vec_vsx_ld (3 * stride, a - 3); vector char r4; vector char r6 = __builtin_vec_vsx_ld (6 * stride, a - 3); vector char r7 = __builtin_vec_vsx_ld (7 * stride, a - 3); vector char r14, h, i, j; if (b) return; v1 = __builtin_vec_vsx_ld (9 * stride, a); v2 = __builtin_vec_vsx_ld (10 * stride, a - 3); v3 = __builtin_vec_vsx_ld (11 * stride, a - 3); r3 = __builtin_vec_mergeh (r3, v3); v5 = __builtin_vec_mergel (r2, r6); r14 = __builtin_vec_mergeh (r3, r7); r4 = __builtin_vec_mergeh (v2, r14); v0 = __builtin_vec_mergeh (r0, r4); unsigned char temp[16]; vector signed char k; h = __builtin_vec_ld (0, temp); i = __builtin_vec_splat (h, 1); ((A *) temp)->a = c; k = __builtin_vec_ld (0, (signed char *) temp); j = __builtin_vec_and (i, (vector char) k); foo (v1, v0, j); foo (v4, v5, j); }