diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2020-10-16 15:06:44 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2020-10-16 15:06:44 -0400 |
commit | aabc96c9195892e669b7728b0e00a7c1a6f3d161 (patch) | |
tree | 795de82ac3c336f561ef72151447aed24fcfbe62 /gcc | |
parent | 4a135bd987e7bff6d3b94efa085e0c246348b486 (diff) | |
download | gcc-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.c | 13 |
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); } |