From: Richard Biener Date: Thu, 5 Oct 2023 08:26:34 +0000 (+0200) Subject: Fix SIMD call SLP discovery X-Git-Tag: basepoints/gcc-15~5733 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6dc44436301143a286e3b45de0673af012299eba;p=thirdparty%2Fgcc.git Fix SIMD call SLP discovery When we do SLP discovery of SIMD calls we run into the issue that when the call is neither builtin nor internal function we have cfn == CFN_LAST but internal_fn_p of that returns true. Since IFN_LAST isn't vectorizable we fail spuriously. Fixed by checking for cfn != CFN_LAST && internal_fn_p (cfn) instead. * tree-vect-slp.cc (vect_build_slp_tree_1): Do not ask for internal_fn_p (CFN_LAST). --- diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index a3e54ebf62a2..fa098f9ff4ea 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1084,7 +1084,8 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, ldst_p = true; rhs_code = CFN_MASK_STORE; } - else if ((internal_fn_p (cfn) + else if ((cfn != CFN_LAST + && internal_fn_p (cfn) && !vectorizable_internal_fn_p (as_internal_fn (cfn))) || gimple_call_tail_p (call_stmt) || gimple_call_noreturn_p (call_stmt)