In this PR we were passing an ordinary non-built-in function to
targetm.vectorize.builtin_md_vectorized_function, which is only
supposed to handle BUILT_IN_MD.

Tested on aarch64-linux-gnu and spot-checked on powerpc64el-linux-gnu.
Applied as obvious (r274524).

Richard


2019-08-15  Richard Sandiford  <richard.sandif...@arm.com>

gcc/
        PR middle-end/91444
        * tree-vect-stmts.c (vectorizable_call): Check that the function
        is a BUILT_IN_MD function before passing it to
        targetm.vectorize.builtin_md_vectorized_function.

Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       2019-08-05 17:46:43.029559672 +0100
+++ gcc/tree-vect-stmts.c       2019-08-15 10:22:47.468694552 +0100
@@ -3376,7 +3376,7 @@ vectorizable_call (stmt_vec_info stmt_in
       if (cfn != CFN_LAST)
        fndecl = targetm.vectorize.builtin_vectorized_function
          (cfn, vectype_out, vectype_in);
-      else if (callee)
+      else if (callee && fndecl_built_in_p (callee, BUILT_IN_MD))
        fndecl = targetm.vectorize.builtin_md_vectorized_function
          (callee, vectype_out, vectype_in);
     }

Reply via email to