aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-04-29 07:48:43 +0200
committerAldy Hernandez <aldyh@redhat.com>2020-04-29 07:52:23 +0200
commitb1742cc9cae28ee3aad96a7f4510c1d08cd903b2 (patch)
tree635dfbc7847a5fd949d956e5d248dbe8fa9705e2
parent57792146bfc1bead822f2a0f43a5e1ade82e17ab (diff)
downloadgcc-b1742cc9cae28ee3aad96a7f4510c1d08cd903b2.zip
gcc-b1742cc9cae28ee3aad96a7f4510c1d08cd903b2.tar.gz
gcc-b1742cc9cae28ee3aad96a7f4510c1d08cd903b2.tar.bz2
Use object_allocator to allocate new value_range_equiv entries.
-rw-r--r--gcc/gimple-ranger-vrp.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/gimple-ranger-vrp.cc b/gcc/gimple-ranger-vrp.cc
index 284862d..411dcac 100644
--- a/gcc/gimple-ranger-vrp.cc
+++ b/gcc/gimple-ranger-vrp.cc
@@ -44,21 +44,27 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-ssa-evrp-analyze.h"
#include "gimple-ranger.h"
-#define DEBUG_RVRP getenv("DEBUG_RVRP")
-
class rvrp_ranger : public trace_ranger
{
public:
+ rvrp_ranger () : trace_ranger (), range_pool ("rvrp value range pool") { }
+ ~rvrp_ranger ()
+ {
+ range_pool.release ();
+ }
// This is the range getter for the simplifier, but is really only
// used for the conditional folding which still uses equivalences.
virtual const value_range_equiv *get_value_range (const_tree expr,
gimple *stmt)
{
widest_irange r;
- if (range_of_expr (r, const_cast<tree> (expr), stmt))
- return new value_range_equiv (r); // FIXME: leaks
- return new value_range_equiv (TREE_TYPE (expr));
+ value_range_equiv *vr = new (range_pool.allocate ()) value_range_equiv;
+ if (!range_of_expr (r, const_cast<tree> (expr), stmt))
+ vr->set_varying (TREE_TYPE (expr));
+ return vr;
}
+private:
+ object_allocator<value_range_equiv> range_pool;
};
class rvrp_folder : public substitute_and_fold_engine