From 78d5e125c008d87cb2e1c08a9ff2a02d4214ffcf Mon Sep 17 00:00:00 2001
From: liuhongt <hongtao.liu@intel.com>
Date: Tue, 19 Jul 2022 11:22:24 +0800
Subject: Move pass_cse_sincos after vectorizer.

__builtin_cexpi can't be vectorized since there's gap between it and
vectorized sincos version(In libmvec, it passes a double and two
double pointer and returns nothing.) And it will lose some
vectorization opportunity if sin & cos are optimized to cexpi before
vectorizer.

I'm trying to add vect_recog_cexpi_pattern to split cexpi to sin and
cos, but it failed vectorizable_simd_clone_call since NULL is returned
by cgraph_node::get (fndecl).  So alternatively, the patch try to move
pass_cse_sincos after vectorizer, just before pas_cse_reciprocals.

Also original pass_cse_sincos additionaly expands pow&cabs, this patch
split that part into a separate pass named pass_expand_powcabs which
remains the old pass position.

gcc/ChangeLog:

	* passes.def: (Split pass_cse_sincos to pass_expand_powcabs
	and pass_cse_sincos, and move pass_cse_sincos after vectorizer).
	* timevar.def (TV_TREE_POWCABS): New timevar.
	* tree-pass.h (make_pass_expand_powcabs): Split from pass_cse_sincos.
	* tree-ssa-math-opts.cc (gimple_expand_builtin_cabs): Ditto.
	(class pass_expand_powcabs): Ditto.
	(pass_expand_powcabs::execute): Ditto.
	(make_pass_expand_powcabs): Ditto.
	(pass_cse_sincos::execute): Remove pow/cabs expand part.
	(make_pass_cse_sincos): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.dg/pow-sqrt-synth-1.c: Adjust testcase.
---
 gcc/timevar.def | 1 +
 1 file changed, 1 insertion(+)

(limited to 'gcc/timevar.def')

diff --git a/gcc/timevar.def b/gcc/timevar.def
index 2dae5e1..651af19 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -220,6 +220,7 @@ DEFTIMEVAR (TV_TREE_SWITCH_CONVERSION, "tree switch conversion")
 DEFTIMEVAR (TV_TREE_SWITCH_LOWERING,   "tree switch lowering")
 DEFTIMEVAR (TV_TREE_RECIP            , "gimple CSE reciprocals")
 DEFTIMEVAR (TV_TREE_SINCOS           , "gimple CSE sin/cos")
+DEFTIMEVAR (TV_TREE_POWCABS           , "gimple expand pow/cabs")
 DEFTIMEVAR (TV_TREE_WIDEN_MUL        , "gimple widening/fma detection")
 DEFTIMEVAR (TV_TRANS_MEM             , "transactional memory")
 DEFTIMEVAR (TV_TREE_STRLEN           , "tree strlen optimization")
-- 
cgit v1.1

