From d8fcab689435a29dba2862693689c624b257d1bf Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 7 Jan 2019 09:49:08 +0100 Subject: re PR c++/85052 (Implement support for clang's __builtin_convertvector) PR c++/85052 * tree-vect-generic.c: Include insn-config.h and recog.h. (expand_vector_piecewise): Add defaulted ret_type argument, if non-NULL, use that in preference to type for the result type. (expand_vector_parallel): Formatting fix. (do_vec_conversion, do_vec_narrowing_conversion, expand_vector_conversion): New functions. (expand_vector_operations_1): Call expand_vector_conversion for VEC_CONVERT ifn calls. * internal-fn.def (VEC_CONVERT): New internal function. * internal-fn.c (expand_VEC_CONVERT): New function. * fold-const-call.c (fold_const_vec_convert): New function. (fold_const_call): Use it for CFN_VEC_CONVERT. * doc/extend.texi (__builtin_convertvector): Document. c-family/ * c-common.h (enum rid): Add RID_BUILTIN_CONVERTVECTOR. (c_build_vec_convert): Declare. * c-common.c (c_build_vec_convert): New function. c/ * c-parser.c (c_parser_postfix_expression): Parse __builtin_convertvector. cp/ * cp-tree.h (cp_build_vec_convert): Declare. * parser.c (cp_parser_postfix_expression): Parse __builtin_convertvector. * constexpr.c: Include fold-const-call.h. (cxx_eval_internal_function): Handle IFN_VEC_CONVERT. (potential_constant_expression_1): Likewise. * semantics.c (cp_build_vec_convert): New function. * pt.c (tsubst_copy_and_build): Handle CALL_EXPR to IFN_VEC_CONVERT. testsuite/ * c-c++-common/builtin-convertvector-1.c: New test. * c-c++-common/torture/builtin-convertvector-1.c: New test. * g++.dg/ext/builtin-convertvector-1.C: New test. * g++.dg/cpp0x/constexpr-builtin4.C: New test. From-SVN: r267632 --- gcc/internal-fn.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'gcc/internal-fn.c') diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index 103e0c1..4f2ef45 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -2581,6 +2581,15 @@ expand_VA_ARG (internal_fn, gcall *) gcc_unreachable (); } +/* IFN_VEC_CONVERT is supposed to be expanded at pass_lower_vector. So this + dummy function should never be called. */ + +static void +expand_VEC_CONVERT (internal_fn, gcall *) +{ + gcc_unreachable (); +} + /* Expand the IFN_UNIQUE function according to its first argument. */ static void -- cgit v1.1