https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71264
--- Comment #11 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 30 May 2016, ro at CeBiTec dot Uni-Bielefeld.DE wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71264 > > --- Comment #10 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot > Uni-Bielefeld.DE> --- > > --- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- > > Does adding > > > > ptr = __builtin_assume_alinged (alignof (footype), ptr); > > mask = __builtin_assume_aligned (alignof (footype), mask); > > > > help? > > The failure mode changes: if I spell it as > > ptr = __builtin_assume_aligned (ptr, __alignof__ (footype)); > mask = __builtin_assume_aligned (mask, __alignof__ (footype)); > > the dump now has > > /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/vect/pr71264.c:14:3: note: > not > vectorized: vector stmt in loop:_16 = VIEW_CONVERT_EXPR<vector(4) unsigned > char>(_15); what does it say before this line? Sth like "no vector type for ..."? > /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/vect/pr71264.c:14:3: note: > can't determine vectorization factor. > /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/vect/pr71264.c:7:6: note: > vectorized 0 loops in function. Hmm, so the idea is that the source uses SImode "vectors" which should get vectorized as V4SImode (four loop iterations). It looks like typedef uint8_t footype __attribute__((vector_size(4))); doesn't get SImode for you? Or the target doesn't have integer vectors? I see on x86_64 before vectorization <bb 3>: # i_22 = PHI <i_13(4), 0(2)> # ivtmp_26 = PHI <ivtmp_25(4), 4(2)> _1 = (sizetype) i_22; _2 = ptr_9(D) + _1; _10 = MEM[(char * {ref-all})_2]; temp_15 = VIEW_CONVERT_EXPR<footype>(_10); _3 = mv_14 ^ temp_15; _11 = VIEW_CONVERT_EXPR<unsigned int>(_3); MEM[(char * {ref-all})_2] = _11; i_13 = i_22 + 4; ivtmp_25 = ivtmp_26 - 1; if (ivtmp_25 != 0) goto <bb 4>; else goto <bb 5>; <bb 4>: goto <bb 3>;