https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109029
--- Comment #9 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Hongtao.liu from comment #8) > > > > One solution is handling it in ix86_builtin_vectorized_function just like > > other math functions which has different input/output sizes. > > Or extend vectorizable_call to handle NARROW/WIDEN cases when output of ifn > is same-sized vector integer of vectype_in, and do NARROW/WIDEN between > ifn_output and vectype_out. > > 3472 /* For now, we only vectorize functions if a target specific builtin > 3473 is available. TODO -- in some cases, it might be profitable to > 3474 insert the calls for pieces of the vector, in order to be able > 3475 to vectorize other operations in the loop. */ > 3476 fndecl = NULL_TREE; > 3477 internal_fn ifn = IFN_LAST; > 3478 tree callee = gimple_call_fndecl (stmt); > 3479 > 3480 /* First try using an internal function. */ > 3481 tree_code convert_code = ERROR_MARK; Another alternative it's we can recognize signbit as shift in the vectorizer.