* [PATCH] Don't invoke range_of_expr multiple times.
@ 2020-10-16 19:09 Andrew MacLeod
0 siblings, 0 replies; only message in thread
From: Andrew MacLeod @ 2020-10-16 19:09 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 795 bytes --]
In the hybrid folder, range_of_stmt and range_on_edge invoke the same
routines in both evrp_folder and ranger_folder and compare results.
In implementing hybrid folder, I inherited it from evrp_folder since
EVRP has a few pre-and post statement things to do.
when the hybdrid folder calls evrp_folder::range_on_edge (or stmt) the
evrp folder simple invokes range_of_expr() for evaluation.
Because I inherited from evrp_folder, this actually calls
hybrid_folder::range_of_expr(), which in turns invokes both evrp_folder
AND ranger on the query.
This was not my intention, and results in additional ranger queries
without any context. Instead, the calls should be made directly to
evrp_folder::range_of_expr.
Bootstrapped on x86_64-pc-linux-gnu, no regressions, pushed.
Andrew
[-- Attachment #2: p1.diff --]
[-- Type: text/x-patch, Size: 1384 bytes --]
2020-10-16 Andrew MacLeod <amacleod@redhat.com>
* gimple-ssa-evrp.c (hybrid_folder::value_on_edge): Call
evrp_folder::value_of_expr directly.
(hybrid_folder::value_of_stmt): Ditto.
diff --git a/gcc/gimple-ssa-evrp.c b/gcc/gimple-ssa-evrp.c
index 7688e4aa4bd..309cdd94c21 100644
--- a/gcc/gimple-ssa-evrp.c
+++ b/gcc/gimple-ssa-evrp.c
@@ -239,7 +239,9 @@ hybrid_folder::value_of_expr (tree op, gimple *stmt)
tree
hybrid_folder::value_on_edge (edge e, tree op)
{
- tree evrp_ret = evrp_folder::value_on_edge (e, op);
+ // Call evrp::value_of_expr directly. Otherwise another dual call is made
+ // via hybrid_folder::value_of_expr, but without an edge.
+ tree evrp_ret = evrp_folder::value_of_expr (op, NULL);
tree ranger_ret = m_ranger->value_on_edge (e, op);
return choose_value (evrp_ret, ranger_ret);
}
@@ -247,7 +249,14 @@ hybrid_folder::value_on_edge (edge e, tree op)
tree
hybrid_folder::value_of_stmt (gimple *stmt, tree op)
{
- tree evrp_ret = evrp_folder::value_of_stmt (stmt, op);
+ // Call evrp::value_of_expr directly. Otherwise another dual call is made
+ // via hybrid_folder::value_of_expr, but without a stmt.
+ tree evrp_ret;
+ if (op)
+ evrp_ret = evrp_folder::value_of_expr (op, NULL);
+ else
+ evrp_ret = NULL_TREE;
+
tree ranger_ret = m_ranger->value_of_stmt (stmt, op);
return choose_value (evrp_ret, ranger_ret);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-10-16 19:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-16 19:09 [PATCH] Don't invoke range_of_expr multiple times Andrew MacLeod
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).