Commit b4e5bc47 by Richard Sandiford Committed by Richard Sandiford

Use IFN_SQRT in tree-vect-patterns.c

In practice all targets that can vectorise sqrt define the appropriate
sqrt<mode>2 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*.

From-SVN: r230490
parent 03dc244a
2015-11-17 Richard Sandiford <richard.sandiford@arm.com> 2015-11-17 Richard Sandiford <richard.sandiford@arm.com>
* 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 <richard.sandiford@arm.com>
* tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P) * tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P)
(BUILTIN_CBRT_P, BUILTIN_ROOT_P): Delete. (BUILTIN_CBRT_P, BUILTIN_ROOT_P): Delete.
...@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-vectorizer.h" #include "tree-vectorizer.h"
#include "dumpfile.h" #include "dumpfile.h"
#include "builtins.h" #include "builtins.h"
#include "internal-fn.h"
#include "case-cfn-macros.h" #include "case-cfn-macros.h"
/* Pattern recognition functions */ /* Pattern recognition functions */
...@@ -1054,18 +1055,13 @@ vect_recog_pow_pattern (vec<gimple *> *stmts, tree *type_in, ...@@ -1054,18 +1055,13 @@ vect_recog_pow_pattern (vec<gimple *> *stmts, tree *type_in,
if (TREE_CODE (exp) == REAL_CST if (TREE_CODE (exp) == REAL_CST
&& real_equal (&TREE_REAL_CST (exp), &dconsthalf)) && 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)); *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); gcall *stmt = gimple_build_call_internal (IFN_SQRT, 1, base);
if (vectorizable_function (stmt, *type_in, *type_in) var = vect_recog_temp_ssa_var (TREE_TYPE (base), stmt);
!= NULL_TREE) gimple_call_set_lhs (stmt, var);
{ return stmt;
var = vect_recog_temp_ssa_var (TREE_TYPE (base), stmt);
gimple_call_set_lhs (stmt, var);
return stmt;
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment