From: rsandifo Date: Tue, 17 Nov 2015 18:54:36 +0000 (+0000) Subject: Use IFN_SQRT in tree-vect-patterns.c X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=901db6c41a06e62b48bb0c7cda7e91648bf98407;p=thirdparty%2Fgcc.git Use IFN_SQRT in tree-vect-patterns.c In practice all targets that can vectorise sqrt define the appropriate sqrt2 optab. The only case where this isn't immediately obvious is the libmass support in rs6000.c, but Mike Meissner said that it shouldn't be exercised for sqrt. This patch therefore uses the internal function interface instead of going via the target hook. Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnueabi and powerpc64-linux-gnu. gcc/ * tree-vect-patterns.c: Include internal-fn.h. (vect_recog_pow_pattern): Use IFN_SQRT instead of BUILT_IN_SQRT*. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230490 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e1be75f3391f..c6ddc5a46ff2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-11-17 Richard Sandiford + + * tree-vect-patterns.c: Include internal-fn.h. + (vect_recog_pow_pattern): Use IFN_SQRT instead of BUILT_IN_SQRT*. + 2015-11-17 Richard Sandiford * tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P) diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index a8d4a8246112..5bab1f57a18f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-vectorizer.h" #include "dumpfile.h" #include "builtins.h" +#include "internal-fn.h" #include "case-cfn-macros.h" /* Pattern recognition functions */ @@ -1054,18 +1055,13 @@ vect_recog_pow_pattern (vec *stmts, tree *type_in, if (TREE_CODE (exp) == REAL_CST && real_equal (&TREE_REAL_CST (exp), &dconsthalf)) { - tree newfn = mathfn_built_in (TREE_TYPE (base), BUILT_IN_SQRT); *type_in = get_vectype_for_scalar_type (TREE_TYPE (base)); - if (*type_in) + if (*type_in && direct_internal_fn_supported_p (IFN_SQRT, *type_in)) { - gcall *stmt = gimple_build_call (newfn, 1, base); - if (vectorizable_function (stmt, *type_in, *type_in) - != NULL_TREE) - { - var = vect_recog_temp_ssa_var (TREE_TYPE (base), stmt); - gimple_call_set_lhs (stmt, var); - return stmt; - } + gcall *stmt = gimple_build_call_internal (IFN_SQRT, 1, base); + var = vect_recog_temp_ssa_var (TREE_TYPE (base), stmt); + gimple_call_set_lhs (stmt, var); + return stmt; } }