diff options
author | Jeff Law <law@redhat.com> | 2017-11-22 13:31:14 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2017-11-22 13:31:14 -0700 |
commit | a5de02e9e3efdcdacc5dc100b61d1fd45e719955 (patch) | |
tree | 97da5bea9a9415baae6f7880c5b5f649e95dff73 /gcc/gimple-ssa-evrp.c | |
parent | 16d24520af1ad5ff832d243f177d88f08a1ba012 (diff) |
* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::evrp_range_analyzer)
Initialize vr_values.
(evrp_range_analyzer::try_find_new_range): Call methods attached to
vr_values via vr_values class instance rather than delegators.
(evrp_range_analyzer::record_ranges_from_phis): Likewise.
(evrp_range_analyzer::record_ranges_from_stmt): Likewise.
(evrp_range_analyzer::push_value_range): Likewise.
(evrp_range_analyzer::pop_value_range): Likewise.
* gimple-ssa-evrp-analyze.h (class evrp_range_analyzer): Remove
most delegators. Those remaining are exposed as public interfaces.
Make vr_values a pointer and private.
(evrp_range_analyzer::~evrp_range_analyzer): Delete the attached
vr_values.
(evrp_range_analyzer::get_vr_value): New method.
* gimple-ssa-evrp.c (class evrp_folder): Use DISABLE_COPY_AND_ASSIGN.
(evrp_folder::evrp_folder): New ctor to initialize vr_values.
(class evrp_dom_walker): Attach evrp_folder class, initialize
it in the ctor. Remove temporary delegators.
(evrp_dom_walker::before_dom_children): Call methods in attached
evrp_range_analyzer class via class instance pointer. Use
free value_range_constant_singleton to remove need for
op_with_constant_singleton_value delegator method. Do not
create a vrp_prop class instance for every call! Narrow
scope of a couple variables.
(evrp_dom_walker::cleanup): Call methods in attached
evrp_range_analyzer class via class instance pointer.
* vr-values.h (class vr_values): Privatize many methods and
data members.
From-SVN: r255074
Diffstat (limited to 'gcc/gimple-ssa-evrp.c')
-rw-r--r-- | gcc/gimple-ssa-evrp.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/gcc/gimple-ssa-evrp.c b/gcc/gimple-ssa-evrp.c index 27a983dd9ae..a554cf9e834 100644 --- a/gcc/gimple-ssa-evrp.c +++ b/gcc/gimple-ssa-evrp.c @@ -46,8 +46,11 @@ class evrp_folder : public substitute_and_fold_engine { public: tree get_value (tree) FINAL OVERRIDE; - + evrp_folder (class vr_values *vr_values_) : vr_values (vr_values_) { } class vr_values *vr_values; + + private: + DISABLE_COPY_AND_ASSIGN (evrp_folder); }; tree @@ -63,7 +66,9 @@ evrp_folder::get_value (tree op) class evrp_dom_walker : public dom_walker { public: - evrp_dom_walker () : dom_walker (CDI_DOMINATORS) + evrp_dom_walker () + : dom_walker (CDI_DOMINATORS), + evrp_folder (evrp_range_analyzer.get_vr_values (false)) { need_eh_cleanup = BITMAP_ALLOC (NULL); } @@ -82,14 +87,7 @@ public: auto_vec<gimple *> stmts_to_remove; class evrp_range_analyzer evrp_range_analyzer; - - /* Temporary delegators. */ - value_range *get_value_range (const_tree op) - { return evrp_range_analyzer.vr_values.get_value_range (op); } - tree op_with_constant_singleton_value_range (tree op) - { return evrp_range_analyzer.vr_values.op_with_constant_singleton_value_range (op); } - void vrp_visit_cond_stmt (gcond *cond, edge *e) - { evrp_range_analyzer.vr_values.vrp_visit_cond_stmt (cond, e); } + class evrp_folder evrp_folder; }; edge @@ -108,8 +106,9 @@ evrp_dom_walker::before_dom_children (basic_block bb) if (virtual_operand_p (lhs)) continue; + value_range *vr = evrp_range_analyzer.get_value_range (lhs); /* Mark PHIs whose lhs we fully propagate for removal. */ - tree val = op_with_constant_singleton_value_range (lhs); + tree val = value_range_constant_singleton (vr); if (val && may_propagate_copy (lhs, val)) { stmts_to_remove.safe_push (phi); @@ -139,7 +138,7 @@ evrp_dom_walker::before_dom_children (basic_block bb) if (gcond *cond = dyn_cast <gcond *> (stmt)) { - vrp_visit_cond_stmt (cond, &taken_edge); + evrp_range_analyzer.vrp_visit_cond_stmt (cond, &taken_edge); if (taken_edge) { if (taken_edge->flags & EDGE_TRUE_VALUE) @@ -153,16 +152,15 @@ evrp_dom_walker::before_dom_children (basic_block bb) } else if (stmt_interesting_for_vrp (stmt)) { - value_range vr = VR_INITIALIZER; output = get_output_for_vrp (stmt); if (output) { tree val; - vr = *get_value_range (output); + value_range *vr = evrp_range_analyzer.get_value_range (output); /* Mark stmts whose output we fully propagate for removal. */ - if ((vr.type == VR_RANGE || vr.type == VR_ANTI_RANGE) - && (val = op_with_constant_singleton_value_range (output)) + if ((vr->type == VR_RANGE || vr->type == VR_ANTI_RANGE) + && (val = value_range_constant_singleton (vr)) && may_propagate_copy (output, val) && !stmt_could_throw_p (stmt) && !gimple_has_side_effects (stmt)) @@ -174,8 +172,6 @@ evrp_dom_walker::before_dom_children (basic_block bb) } /* Try folding stmts with the VR discovered. */ - class evrp_folder evrp_folder; - evrp_folder.vr_values = &evrp_range_analyzer.vr_values; bool did_replace = evrp_folder.replace_uses_in (stmt); if (fold_stmt (&gsi, follow_single_use_edges) || did_replace) @@ -222,7 +218,8 @@ evrp_dom_walker::before_dom_children (basic_block bb) if (TREE_CODE (arg) != SSA_NAME || virtual_operand_p (arg)) continue; - tree val = op_with_constant_singleton_value_range (arg); + value_range *vr = evrp_range_analyzer.get_value_range (arg); + tree val = value_range_constant_singleton (vr); if (val && may_propagate_copy (arg, val)) propagate_value (use_p, val); } @@ -245,7 +242,7 @@ evrp_dom_walker::cleanup (void) if (dump_file) { fprintf (dump_file, "\nValue ranges after Early VRP:\n\n"); - evrp_range_analyzer.vr_values.dump_all_value_ranges (dump_file); + evrp_range_analyzer.dump_all_value_ranges (dump_file); fprintf (dump_file, "\n"); } |