public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [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).