http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46142
Uros Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2010.10.31 06:55:48 Target Milestone|--- |4.6.0 Ever Confirmed|0 |1 --- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2010-10-31 06:55:48 UTC --- Well, well. static bool vectorizable_call (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt) { ... enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type}; ... /* Bail out if the function has more than three arguments, we do not have interesting builtin functions to vectorize with more than two arguments except for fma. No arguments is also not good. */ if (nargs == 0 || nargs > 3) return false; ... } For some reason, valgrind didn't cathc this problem. Anyway, the patch is obvious: Index: tree-vect-stmts.c =================================================================== --- tree-vect-stmts.c (revision 166104) +++ tree-vect-stmts.c (working copy) @@ -1308,7 +1308,8 @@ vectorizable_call (gimple stmt, gimple_s loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); tree fndecl, new_temp, def, rhs_type; gimple def_stmt; - enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type}; + enum vect_def_type dt[3] + = {vect_unknown_def_type, vect_unknown_def_type, vect_unknown_def_type}; gimple new_stmt = NULL; int ncopies, j; VEC(tree, heap) *vargs = NULL;