http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53366
--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2012-05-16 17:15:58 UTC --- foo (struct U * restrict p1, const complex double * restrict x) { vector(4) double vect_var_.41; vector(4) double vect_var_.40; vector(4) double vect_var_.39; vector(4) double vect_var_.38; vector(4) double vect_var_.37; vector(4) double vect_var_.32; vector(4) double vect_var_.31; vector(4) double vect_var_.30; vector(4) double * restrict vect_p.26; vector(4) double vect_var_.25; <bb 2>: vect_var_.37_84 = MEM[(const complex double *)x_5(D)]; vect_var_.38_86 = MEM[(const complex double *)x_5(D) + 32B]; vect_var_.39_88 = MEM[(const complex double *)x_5(D) + 64B]; vect_var_.25_72 = MEM[(const complex double *)x_5(D) + 96B]; vect_var_.30_76 = MEM[(struct U *)p1_14(D)]; vect_p.26_77 = p1_14(D) + 32; vect_var_.31_78 = MEM[(struct U *)p1_14(D) + 32B]; vect_p.26_79 = &MEM[(void *)p1_14(D) + 64B]; vect_var_.32_80 = MEM[(struct U *)p1_14(D) + 64B]; vect_var_.40_89 = vect_var_.30_76 + vect_var_.37_84; vect_var_.40_90 = vect_var_.31_78 + vect_var_.38_86; vect_var_.40_91 = vect_var_.32_80 + vect_var_.39_88; vect_var_.41_92 = vect_var_.38_86 + vect_var_.40_89; vect_var_.41_93 = vect_var_.39_88 + vect_var_.40_90; vect_var_.41_94 = vect_var_.25_72 + vect_var_.40_91; MEM[(struct U *)p1_14(D)] = vect_var_.41_92; MEM[(struct U *)p1_14(D) + 32B] = vect_var_.41_93; MEM[(struct U *)p1_14(D) + 64B] = vect_var_.41_94; return; } It looks to me that x is handled in a totally wrong way.