public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/aoliva/heads/testme)] make sincos take type from intrinsic formal, not from actual
@ 2020-10-02 9:16 Alexandre Oliva
0 siblings, 0 replies; only message in thread
From: Alexandre Oliva @ 2020-10-02 9:16 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:d472f1b1d6c9bf2fc0bdff9a784853fb9a0596ae
commit d472f1b1d6c9bf2fc0bdff9a784853fb9a0596ae
Author: Alexandre Oliva <oliva@adacore.com>
Date: Tue Sep 29 09:50:05 2020 -0300
make sincos take type from intrinsic formal, not from actual
Diff:
---
gcc/tree-ssa-math-opts.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 8423caa3ee3..31fd241e69a 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -1139,7 +1139,7 @@ execute_cse_sincos_1 (tree name)
{
gimple_stmt_iterator gsi;
imm_use_iterator use_iter;
- tree fndecl, res, type;
+ tree fndecl = NULL_TREE, res, type = NULL_TREE;
gimple *def_stmt, *use_stmt, *stmt;
int seen_cos = 0, seen_sin = 0, seen_cexpi = 0;
auto_vec<gimple *> stmts;
@@ -1147,7 +1147,6 @@ execute_cse_sincos_1 (tree name)
int i;
bool cfg_changed = false;
- type = TREE_TYPE (name);
FOR_EACH_IMM_USE_STMT (use_stmt, use_iter, name)
{
if (gimple_code (use_stmt) != GIMPLE_CALL
@@ -1169,15 +1168,34 @@ execute_cse_sincos_1 (tree name)
break;
default:;
+ continue;
}
- }
+ tree t = TREE_VALUE (TYPE_ARG_TYPES (gimple_call_fntype (use_stmt)));
+ if (!type)
+ type = t;
+ else if (t != type)
+ {
+ if (!tree_nop_conversion_p (type, t))
+ return false;
+ /* If there is more than one type to choose from, prefer one
+ that has a CEXPI builtin. */
+ else if (!fndecl
+ && (fndecl = mathfn_built_in (t, BUILT_IN_CEXPI)))
+ type = t;
+ }
+ }
if (seen_cos + seen_sin + seen_cexpi <= 1)
return false;
+ if (type != TREE_TYPE (name)
+ && !tree_nop_conversion_p (type, TREE_TYPE (name)))
+ return false;
+
/* Simply insert cexpi at the beginning of top_bb but not earlier than
the name def statement. */
- fndecl = mathfn_built_in (type, BUILT_IN_CEXPI);
+ if (!fndecl)
+ fndecl = mathfn_built_in (type, BUILT_IN_CEXPI);
if (!fndecl)
return false;
stmt = gimple_build_call (fndecl, 1, name);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-10-02 9:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-02 9:16 [gcc(refs/users/aoliva/heads/testme)] make sincos take type from intrinsic formal, not from actual Alexandre Oliva
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).