------- Comment #5 from irar at il dot ibm dot com 2007-10-21 08:45 ------- (In reply to comment #4) > Created an attachment (id=14370) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14370&action=view) [edit] > Vectorization dump file > Thanks!
The vectorizer fails in transformation phase in function vectorizable_operation: if (icode == CODE_FOR_nothing) { if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "op not supported by target."); if (GET_MODE_SIZE (vec_mode) != UNITS_PER_WORD || LOOP_VINFO_VECT_FACTOR (loop_vinfo) < vect_min_worthwhile_factor (code)) return false; if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "proceeding using word mode."); } During the analysis, we also get CODE_FOR_nothing, but also at that stage LOOP_VINFO_VECT_FACTOR (loop_vinfo) > vect_min_worthwhile_factor (code) hence we proceed using word mode. At the end of the analysis, we change the vectorization factor (divide it by 4) to perform pure SLP on the loop, so during the transformation phase, when we get to the same code again, we probably get that LOOP_VINFO_VECT_FACTOR (loop_vinfo) < vect_min_worthwhile_factor (code) and we fail. The idea was that we should not fail to vectorize during the transformation, since everything was checked during the analysis, therefore, a gcc_assert was put here. I'll have to think how to fix this problem. Thanks, Ira -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33804