Don't invoke range_of_expr multiple times.
authorAndrew MacLeod <amacleod@redhat.com>
Fri, 16 Oct 2020 19:06:44 +0000 (15:06 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Fri, 16 Oct 2020 19:06:44 +0000 (15:06 -0400)
Call evrp_folder::range_of_expr directly so we dont end up calling
hybrid_folder::range_of_expr and doing double lookups/comparisons.

* gimple-ssa-evrp.c (hybrid_folder::value_on_edge): Call
evrp_folder::value_of_expr directly.
(hybrid_folder::value_of_stmt): Ditto.

gcc/gimple-ssa-evrp.c

index 7688e4aa4bdf040395180b88f719aea29b79722c..309cdd94c21313d5a555530e3d8b450e144659ef 100644 (file)
@@ -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);
 }