aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2020-10-16 15:06:44 -0400
committerAndrew MacLeod <amacleod@redhat.com>2020-10-16 15:06:44 -0400
commitaabc96c9195892e669b7728b0e00a7c1a6f3d161 (patch)
tree795de82ac3c336f561ef72151447aed24fcfbe62 /gcc
parent4a135bd987e7bff6d3b94efa085e0c246348b486 (diff)
downloadgcc-aabc96c9195892e669b7728b0e00a7c1a6f3d161.zip
gcc-aabc96c9195892e669b7728b0e00a7c1a6f3d161.tar.gz
gcc-aabc96c9195892e669b7728b0e00a7c1a6f3d161.tar.bz2
Don't invoke range_of_expr multiple times.
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gimple-ssa-evrp.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/gimple-ssa-evrp.c b/gcc/gimple-ssa-evrp.c
index 7688e4a..309cdd9 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);
}