From 6dc44436301143a286e3b45de0673af012299eba Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 5 Oct 2023 10:26:34 +0200 Subject: [PATCH] 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). --- gcc/tree-vect-slp.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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) -- 2.47.2