diff options
author | Richard Biener <rguenther@suse.de> | 2015-10-27 08:56:03 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-10-27 08:56:03 +0000 |
commit | 61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5 (patch) | |
tree | bd4ad7e7b2c8112a0f115b874c66bb4632a2280b /gcc/cfgloop.h | |
parent | 88bae6f494dc867edd8e6257658974d629bdc53b (diff) | |
download | gcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.zip gcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.tar.gz gcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.tar.bz2 |
cfg.c (free_edge): Add function argument and use it instead of cfun.
2015-10-27 Richard Biener <rguenther@suse.de>
* cfg.c (free_edge): Add function argument and use it instead of cfun.
(clear_edges): Likewise.
* cfg.h (clear_edges): Adjust prototype.
* cfgexpand.c (pass_expand::execute): Adjust.
* cfgloop.c (release_recorded_exits): Add function argument and use
it instead of cfun.
* cfgloop.h (release_recorded_exits): Adjust prototype.
(loops_state_satisfies_p): Add overload with function argument.
(loops_state_set): Likewise.
(loops_state_clear): Likewise.
(struct loop_iterator): Add function argument to constructor
and iterator and use it instead of cfun.
(FOR_EACH_LOOP_FN): New macro.
(loop_optimizer_finalize): Add overload with function argument.
* loop-init.c (loop_optimizer_init): Adjust.
(fix_loop_structure): Likewise.
(loop_optimizer_finaliz): Add function argument and use it
instead of cfun.
* tree-cfg.c (delete_tree_cfg_annotations): Likewise.
* tree-cfg.h (delete_tree_cfg_annotations): Adjust prototype.
* cgraph.c (release_function_body): Do not push/pop cfun.
* final.c (rest_of_clean_state): Adjust.
* graphite.c (graphite_finalize): Likewise.
* tree-ssa-copy.c (fini_copy_prop): Likewise.
* tree-ssa-dce.c (perform_tree_ssa_dce): Likewise.
* tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise.
(tree_unroll_loops_completely): Likewise.
(pass_complete_unrolli::execute): Likewise.
* tree-ssa-loop-niter.c (free_numbers_of_iterations_estimates):
Add function argument and use it instead of cfun.
* tree-ssa-loop-niter.h (free_numbers_of_iterations_estimates):
Adjust prototype.
* tree-ssa-loop.c (tree_ssa_loop_done): Adjust.
* tree-ssa.c (delete_tree_ssa): Add function argument and use it
instead of cfun.
* tree-ssa.h (delete_tree_ssa): Adjust prototype.
* tree-ssanames.c (fini_ssanames): Add function argument and use it
instead of cfun.
* tree-ssanames.c (fini_ssanames): Adjust prototype.
* tree-vrp.c (execute_vrp): Adjust.
* value-prof.c (free_histograms): Add function argument and use it
instead of cfun.
* value-prof.h (free_histograms): Adjust prototype.
From-SVN: r229405
Diffstat (limited to 'gcc/cfgloop.h')
-rw-r--r-- | gcc/cfgloop.h | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 07b070b..cd4a4c9 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -264,7 +264,7 @@ extern void flow_loop_free (struct loop *); int flow_loop_nodes_find (basic_block, struct loop *); unsigned fix_loop_structure (bitmap changed_bbs); bool mark_irreducible_loops (void); -void release_recorded_exits (void); +void release_recorded_exits (function *); void record_loop_exits (void); void rescan_loop_exit (edge, bool, bool); @@ -492,27 +492,45 @@ number_of_loops (struct function *fn) described by FLAGS. */ static inline bool +loops_state_satisfies_p (function *fn, unsigned flags) +{ + return (loops_for_fn (fn)->state & flags) == flags; +} + +static inline bool loops_state_satisfies_p (unsigned flags) { - return (current_loops->state & flags) == flags; + return loops_state_satisfies_p (cfun, flags); } /* Sets FLAGS to the loops state. */ static inline void +loops_state_set (function *fn, unsigned flags) +{ + loops_for_fn (fn)->state |= flags; +} + +static inline void loops_state_set (unsigned flags) { - current_loops->state |= flags; + loops_state_set (cfun, flags); } /* Clears FLAGS from the loops state. */ static inline void +loops_state_clear (function *fn, unsigned flags) +{ + loops_for_fn (fn)->state &= ~flags; +} + +static inline void loops_state_clear (unsigned flags) { if (!current_loops) return; - current_loops->state &= ~flags; + loops_state_clear (cfun, flags); } /* Loop iterators. */ @@ -531,11 +549,14 @@ enum li_flags struct loop_iterator { - loop_iterator (loop_p *loop, unsigned flags); + loop_iterator (function *fn, loop_p *loop, unsigned flags); ~loop_iterator (); inline loop_p next (); + /* The function we are visiting. */ + function *fn; + /* The list of loops to visit. */ vec<int> to_visit; @@ -551,7 +572,7 @@ loop_iterator::next () while (this->to_visit.iterate (this->idx, &anum)) { this->idx++; - loop_p loop = get_loop (cfun, anum); + loop_p loop = get_loop (fn, anum); if (loop) return loop; } @@ -560,26 +581,27 @@ loop_iterator::next () } inline -loop_iterator::loop_iterator (loop_p *loop, unsigned flags) +loop_iterator::loop_iterator (function *fn, loop_p *loop, unsigned flags) { struct loop *aloop; unsigned i; int mn; this->idx = 0; - if (!current_loops) + this->fn = fn; + if (!loops_for_fn (fn)) { this->to_visit.create (0); *loop = NULL; return; } - this->to_visit.create (number_of_loops (cfun)); + this->to_visit.create (number_of_loops (fn)); mn = (flags & LI_INCLUDE_ROOT) ? 0 : 1; if (flags & LI_ONLY_INNERMOST) { - for (i = 0; vec_safe_iterate (current_loops->larray, i, &aloop); i++) + for (i = 0; vec_safe_iterate (loops_for_fn (fn)->larray, i, &aloop); i++) if (aloop != NULL && aloop->inner == NULL && aloop->num >= mn) @@ -588,7 +610,7 @@ loop_iterator::loop_iterator (loop_p *loop, unsigned flags) else if (flags & LI_FROM_INNERMOST) { /* Push the loops to LI->TO_VISIT in postorder. */ - for (aloop = current_loops->tree_root; + for (aloop = loops_for_fn (fn)->tree_root; aloop->inner != NULL; aloop = aloop->inner) continue; @@ -614,7 +636,7 @@ loop_iterator::loop_iterator (loop_p *loop, unsigned flags) else { /* Push the loops to LI->TO_VISIT in preorder. */ - aloop = current_loops->tree_root; + aloop = loops_for_fn (fn)->tree_root; while (1) { if (aloop->num >= mn) @@ -643,7 +665,12 @@ loop_iterator::~loop_iterator () } #define FOR_EACH_LOOP(LOOP, FLAGS) \ - for (loop_iterator li(&(LOOP), FLAGS); \ + for (loop_iterator li(cfun, &(LOOP), FLAGS); \ + (LOOP); \ + (LOOP) = li.next ()) + +#define FOR_EACH_LOOP_FN(FN, LOOP, FLAGS) \ + for (loop_iterator li(fn, &(LOOP), FLAGS); \ (LOOP); \ (LOOP) = li.next ()) @@ -691,7 +718,12 @@ extern void init_set_costs (void); /* Loop optimizer initialization. */ extern void loop_optimizer_init (unsigned); -extern void loop_optimizer_finalize (void); +extern void loop_optimizer_finalize (function *); +inline void +loop_optimizer_finalize () +{ + loop_optimizer_finalize (cfun); +} /* Optimization passes. */ enum |